---
title: "Plocka ut. Hittar inte svaret."
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/16404-plocka-ut-hittar-inte-svaret"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "mikaeled"
published: "2001-12-09T19:46:00.000Z"
updated: "2001-12-10T17:12:00.000Z"
replies: 9
views: 231
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/16404-plocka-ut-hittar-inte-svaret"
---

# Plocka ut. Hittar inte svaret.

## #1 — mikaeled, 2001-12-09T19:46Z

Hej,

Har letat länge efter att hitta koden hur man gör detta. 

Jag har en variabl som innehåller följande text:

(advertiser $0.30)
(advertiser $3.20)
(advertiser $1.66)

med följande kod;

```
eregi("advertiser(.*))", $file, $out);
```

så tar den ut allting efter första advertiser och sista ) så att det ser ut såhär:

```
$0.30)
(advertiser $3.20)
(advertiser $1.66
```

men jag vill ta ut varje så det blir:

$out\[1\] = $0.30
$out\[2\] = $3.20
$out\[3\] = $1.66

dvs att den tar ut för första och sedan andra ) etc...

hur gör man? jag tror att man ska ändra .\* till ngt annat, vet dock inte hur.

Mikael

\[Redigerat av mikaeled den 09 dec 2001\]

\[Redigerat av mikaeled den 09 dec 2001\]

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

## #2 — 2bas, 2001-12-09T21:26Z

Jag är så jäkla dålig på regexps så, jag skulle gjort något sånt här istället:

```
$str="(advertiser $0.30)
(advertiser $3.20)
(advertiser $1.66)";

$str=str_replace(')','',$str);
$out=explode('(advertiser ',$str);
```

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

## #3 — mikaeled, 2001-12-10T09:31Z

jag kan inte göra så, tyvärr. men någon här måste ju veta hur man gör. 

Mikael

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

## #4 — Brimba, 2001-12-10T13:48Z

Vill du ha det så, så bör den riktiga pattern se ut såhär:

```
"\(advertiser\ (.*)\)"
```

alltså:

```
eregi("\(advertiser\ (.*)\)", $file, $out);
```

Nu har jag inte hållt på med PHP någonting så jag vet inte. Men generellt sätt så bör ju regular expressions fungera på samma sätt.
Du kan ju prova i alla fall :)

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

## #5 — mikaeled, 2001-12-10T14:32Z

spelar ingen roll mot min översta koden. 
resultatet blir exakt samma dvs att den tar all efter första advertiser och sista ) men jag vill ha efter varje advertiser och efter varje )
Mikael

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

## #6 — 2bas, 2001-12-10T15:49Z

fattar inte riktigt vad du skall göra, då mitt förra förslag inte funkade. Men om du absolut vill använda regexps så kan följande göra vad du vill.

```
$str="(advertiser $0.30) (advertiser $3.20) (advertiser $1.66)";

$str=ereg_replace("[\(\)a-zA-Z]","", $str);
$out=explode("  ",$str);
```

Men detta funkar inte om dina advertiser är typ advertiser1, advertiser2...

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

## #7 — Brimba, 2001-12-10T15:51Z

såhär kanske?

```
$file = "(advertiser $0.30)(advertiser $3.20)(advertiser $1.66)";
$ptrn = "\(advertiser\ ([^\)]*)\)";
$out = eregi_replace($ptrn, "\\1<br>", $file);
$outarr = explode("<br>", $out);
echo $outarr[0]."<br>";
echo $outarr[1]."<br>";
echo $outarr[2]."<br>";
```

r/ explode fanns visst. Tack föregående talare :)

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

## #8 — spango, 2001-12-10T16:12Z

Kleenestjärnan (alltså \*) är "greedy", dvs den försöker matcha så mycket som den kan utan att regexpen misslyckas, och eftersom "." betyder "allt som inte är radbrytning" så käkar den glatt upp parantesen. För att göra stjärnan ickegirig använder man frågetecken efter:

```
eregi('advertiser (.*?)\)', $file, $out);
```

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

## #9 — Brimba, 2001-12-10T16:50Z

spango, jag är mycket tveksam till att det där fungerar.

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

## #10 — spango, 2001-12-10T17:12Z

Klart det inte gör ;) 
[preg_match_all](http://www.php.net/manual/en/function.preg-match-all.php) är bäst i det här fallet, skulle jag vilja påstå:

```
preg_match_all('/\(advertiser (.*?)\)/', $sträng_att_matcha, $matches);
$numbers = $matches[1];
```

Om $sträng_att_matcha innehöll texten i det första inlägget här i tråden, så skulle $numbers efteråt vara array('$0.30', '$3.20', '$1.66'). Man skulle iofs kunna göra det lite fräckare:

```
preg_match_all('/\(advertiser \$(\d+(\.\d+)?)\)/', $sträng_att_matcha, $matches);
$numbers = $matches[1];
```

Nu skulle $numbers vara en array av numeriska värden, flyt- eller heltal (eller egentligen strängar som går att använda som flyt- och heltal).

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

---

Tråden på webben: https://www.webforum.nu/amne/php/16404-plocka-ut-hittar-inte-svaret
