---
title: "explode med regexp?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/109964-explode-med-regexp"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "aasah"
published: "2004-08-24T18:09:53.000Z"
updated: "2004-08-26T15:51:08.000Z"
replies: 6
views: 319
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/109964-explode-med-regexp"
---

# explode med regexp?

## #1 — aasah, 2004-08-24T18:09Z

Går det, och i så fall hur, att få en sträng uppdelad som explode fast på ett regexp i stället för en fast delsträng?

Alltså jag skulle vilja explodera en sträng på numreringen 1), 2), 3)... och om det funkar med regexp är det ju lätt, annars betydligt värre...

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

## #2 — spango, 2004-08-24T18:33Z

<http://www.php.net/preg_split>

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

## #3 — aasah, 2004-08-25T08:21Z

Tack, spango! :D Hittade något ännu bättre tack vare dig: preg_replace . 

Men ... det funkar bara ibland???

Jag har en fil i vilken det ligger frågesportsfrågor på vettig form för oss människor:

```
1) Hur lång är en timme?
* 30 min
* 60 min (correct)
* 30 sek
* 60 sek

2) Vad heter Sveriges huvudstad?
* Malmö
* Stockholm (correct)
* Oslo

3)
....
```

(Fast med andra frågor....)

Jag vill förvandla den till följande:

```
::Q
Hur lång är en timme?
#A
30 min
#A
60 min
%%
1
#A
30 sek
#A
60 sek
::Q 
Vad heter Sveriges huvudstad?
#A
Malmö
#A
Stockholm 
%%
1
#A
Oslo
::Q
....
```

Följaktligen skriver jag: 

```php
$txtStr = preg_replace("/\\n[\\d]+\\)/", "::Q\\n", $txtStr);
echo "::Q added: \\n" . nl2br("$txtStr"); //Funkar galant
$txtStr = preg_replace("/\\* /", "#A\\n", $txtStr); //händer ingenting
echo "#A added: \\n" . nl2br("$txtStr");
$txtStr = preg_replace("/\\(correct\\) /", "\\n%%\\n1", $txtStr);  //händer ingenting
echo "%% added: \\n" . nl2br("$txtStr");
```

Resultatet blir:

```

::Q
Hur lång är en timme?
* 30 min
* 60 min (correct)
* 30 sek
* 60 sek

::Q
Vad heter Sveriges huvudstad?
* Malmö
* Stockholm (correct)
* Oslo

::Q
....
```

???
1) VAR kommer den tomma raden före ::Q ifrån??? Jag trodde jag ersatte den?
2) Varför ignoreras de två sista preg_replace:n??? :q
Vad är det nu jag inte ser.... :q

RED: Det blir tyvärr ett " " (mellanslag) före ::Q här på wF. 
Det har inte jag satt dit och det finns inte i min fil. (Är det baksidan med att fixa 
smileys först på raden kanske?) Nåja, låtsa att det inte finns, tack!

RED 2: Lagt till den extra \\ som behövs på wF för att esc-tecknen ska synas....

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

## #4 — aasah, 2004-08-25T16:27Z

> **aasah skrev:**
>
> .... Följaktligen skriver jag: 
>
> ```php
> $txtStr = preg_replace("/\\n[\\d]+\\)/", "::Q\\n", $txtStr);
> echo "::Q added: \\n" . nl2br("$txtStr"); //Funkar galant
> $txtStr = preg_replace("/\\* /", "#A\\n", $txtStr); //händer ingenting
> echo "#A added: \\n" . nl2br("$txtStr");
> $txtStr = preg_replace("/\\(correct\\) /", "\\n%%\\n1", $txtStr);  //händer ingenting
> echo "%% added: \\n" . nl2br("$txtStr");
> ```
>
> ...

Det visade sig att när man skrev rätt så funkade de två översta preg_replace:n. Däremot inte den sista. Löste det genom att byta till str_replace sist, alltså:

```php
$txtStr = preg_replace("/\\n[\\d]+\\)/", "::Q\\n", $txtStr);
echo "::Q added: \\n" . nl2br("$txtStr"); //Funkar galant
$txtStr = preg_replace("/\\* /", "#A\\n", $txtStr); 
echo "#A added: \\n" . nl2br("$txtStr"); //Funkar galant
$txtStr = str_replace("(correct)", "\\n%%\\n1", $txtStr);  
echo "%% added: \\n" . nl2br("$txtStr");//med str går det
```

preg_replace kanske inte funkar där den inte behövs?? :q

Jag får fortfarande plocka bort den tomma raden före ::Q för hand, men det är överkomligt. :)

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

## #5 — spango, 2004-08-26T08:01Z

Du har ett mellanslag efter slutparantesen i preg_replace-versionen, tror det är det.
Förresten, det är egentligen bättre att använda ^ i stället för \\n för att matcha början på rad, och $ för att matcha slut på rad. använder man \\n förutsätter man att (a) det faktiskt är en radbrytning där - vilket pajar om t.ex. filen tar slut innan raden - och att (b) radbrytningen faktiskt är \\n och inget annat, vilket kan paja under Windows och Mac.

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

## #6 — aasah, 2004-08-26T08:24Z

> **spango skrev:**
>
> Du har ett mellanslag efter slutparantesen i preg_replace-versionen, tror det är det...

Ååh! Vad man kan vara blind ibland! Tack, spango! :D Då fattar jag...

> **spango skrev:**
>
> Förresten, det är egentligen bättre att använda ^ i stället för \\n för att matcha början på rad, och $ för att matcha slut på rad. använder man \\n förutsätter man att (a) det faktiskt är en radbrytning där - vilket pajar om t.ex. filen tar slut innan raden - och att (b) radbrytningen faktiskt är \\n och inget annat, vilket kan paja under Windows och Mac.

Jag vet, men jag ville ju att \\n skulle vara med i det som byttes ut. Och det skumma är att eftersom det byter ut resten av uttrycket så hittar den ju \\n, likväl byts just \\n inte ut??? :q Skumt...

Använder Windows och den hittar \\n ? Filen är helt skriven i en PC under Windows. Vad är det som kan paja? Hjälper det om man skriver \[\\n\\b\] istället för \\n ?? Eller är det något annat som kan spöka?

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

## #7 — spango, 2004-08-26T15:51Z

Hm... nej, funkar det borde det vara OK.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/109964-explode-med-regexp
