---
title: "regexp hell!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/38689-regexp-hell"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Matti"
published: "2002-02-28T11:56:36.000Z"
updated: "2002-03-01T10:02:33.000Z"
replies: 10
views: 368
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/38689-regexp-hell"
---

# regexp hell!

## #1 — Matti, 2002-02-28T11:56Z

Hej

Jag har variabeln $body som innehåller ett inläst HTML-dokument. I det inlästa HTML-dokumentet finns strängar som {body}, {title}, {navigation}, {footer} osv. Jag vill plocka ut dessa strängar och slänga in dem i en variabel/array av något slag. Har lekt runt lite med reguljära uttryck men inte lyckats åstadkomma något vettigt.

Hjälp?

Permalänk: https://www.webforum.nu/p/38689

## #2 — nicclas, 2002-02-28T13:46Z

Kan du visa ett litet exempel på html-fil och hur du vill ersätta?

Permalänk: https://www.webforum.nu/p/615295

## #3 — Matti, 2002-02-28T13:57Z

html-filen är en template

```
<html>
<head>
<title>{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<table width="750" border="0" cellspacing="3" cellpadding="3">
  <tr>
    <td width="150" align="left" valign="top"> 
      <p><font face="Verdana, Arial, Helvetica, sans-serif" size="5"><b>{logo}</b></font></p>
      <p>&nbsp;</p>
      <p><a href="../msystem/skrivindata.php">l&auml;gg till sida</a><br>
        <a href="../msystem/andradata.php">&auml;ndra data</a><br>
        navlink3<br>
        navlink4<br>
        navlink5 </p>
      <p>&nbsp;</p>
      <p><font face="Verdana, Arial, Helvetica, sans-serif" size="4"><b>Ads:</b></font></p>
      <p>{ads}</p>
      </td>
    <td align="left" valign="top">{content}</td>
  </tr>
</table>
</body>
</html>
```

Jag vill plocka ut "title", "logo", "ads" och "content" och placera dessa i en variabel så att jag kan lagra dem i en databas.

Möjligt?

Permalänk: https://www.webforum.nu/p/615304

## #4 — SPiN, 2002-02-28T14:16Z

Klart att det är möjligt!

```php
<?php
...
preg_match ( "{[a-z]}", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
    // Stoppa in $arrMatches[ $i ] i databasen
}
...
?>
```

Det reguljära uttrycket tillåter endast stora och små bokstäver från det engelska alfabetet mellan de två "bracketchar'sen" ( **{** och **}** ). Resultatet hamnar i arrayen $arrMatches, och loopen börjar på 1, etftersom att $arrMatches\[ 0 \] innehåller hela strängen och inget resultat.

Permalänk: https://www.webforum.nu/p/615316

## #5 — Matti, 2002-02-28T14:56Z

Hej,
tack för svaret.

När jag testkörde följande skript skrevs ingenting ut på sidan

```php
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}";

preg_match ( "{[a-z]}", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
	// skriver ut innehållet
    echo $arrMatches[$i];
}

?>
```

Nu är jag visserligen helt hopplös på loopar men echo $arrMatches\[$i\]; borde väl skriva ut innehållet i $arrMatches? Vad har jag missat?

Permalänk: https://www.webforum.nu/p/615334

## #6 — SPiN, 2002-02-28T15:25Z

Ja, det borde det. Jag kom på en sak, så här borde mönsret se ut:
**preg_match ( "/\\{(\[a-z\]{1,})\\}/is", $body, $arrMatches );**

Vad får du för resultat om du skriver ut storleken på arrayen? ( echo count ( $arrMatches ) ).

Permalänk: https://www.webforum.nu/p/615342

## #7 — Matti, 2002-02-28T15:50Z

echo count ( $arrMatches ); ger siffran 2.

```php
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}";
preg_match ( "/\{([a-z]{1,})\}/is", $body, $arrMatches ); 
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
    // skriver ut innehållet
    echo $arrMatches[$i]; // <------ skriver ut "with"

}
?>
```

$arrMatches\[0\] skriver ut "{with}".

Permalänk: https://www.webforum.nu/p/615360

## #8 — SPiN, 2002-02-28T16:33Z

Använd preg_match_all () istället för preg_match (). :)

Red.}
Så här ser scriptet ut alltså: :)

```php
<?php
$body = "sample text {with} some nice {template} elements and lots of {brackets}";
preg_match_all ( "{([a-zA-Z]{1,})}", $body, $arrMatches );
for ( $i = 1; $i < count ( $arrMatches ); $i++ ) {
    // skriver ut innehållet
    echo $arrMatches[ $i ][ 1 ];
}
?>
```

Permalänk: https://www.webforum.nu/p/615386

## #9 — Matti, 2002-03-01T06:47Z

aaah! :)

Fungerar fortfarande inte. Skriptet som du postade ovan skriver ut "text". Fungerar det hos dig?

Permalänk: https://www.webforum.nu/p/615556

## #10 — nicclas, 2002-03-01T08:38Z

Prova så här ;)

```
<?php

$body = "sample text {with} some nice {template} elements and lots of {brackets}
";
preg_match_all("/{([a-zA-Z]+)}/mis",$body,$arrMatches);
for ($i=0;$i<=count($arrMatches);$i++) {
    // skriver ut innehållet
    echo $arrMatches[1][$i]."\n";
}

?>
```

/nicclas - <https://www.nyhetsrubriker.com>

Permalänk: https://www.webforum.nu/p/615598

## #11 — Matti, 2002-03-01T10:02Z

Hey, där ser man. Nu fungerar det. :) 

Tack för hjälpen, Spin och nicclas. :)

Permalänk: https://www.webforum.nu/p/615632

---

Tråden på webben: https://www.webforum.nu/amne/php/38689-regexp-hell
