---
title: "Regexp-problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/14662-regexp-problem"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Swey"
published: "2000-07-16T18:38:00.000Z"
updated: "2000-07-16T23:07:00.000Z"
replies: 6
views: 483
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/14662-regexp-problem"
---

# Regexp-problem

## #1 — Swey, 2000-07-16T18:38Z

när jag använder
$str = eregi_replace( '(\\\[\[b-\]\\\])(.+)(\\\[/b\\\])', '\<b\>\\2\</b\>', $str );

för att göra om \[b-\]text till \<b\>text\</b\> så strular det när jag har flera stycken i rad...

\[b-\]nummer 1 lala \[b-\]nummer 2
blir
\<b\>nummer 1 lala \[b-\]nummer 2\</b\>

går detta att lösa??

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

## #2 — nicclas, 2000-07-16T19:34Z

[Här](http://www.php.net/manual/pcre.pattern.syntax.php) står att Reg. Exp:ar är giriga, dvs vill matcha en så stor sträng som möjligt. Dessutom står det att ? gör att den inte blir girig....
Detta gäller Perl-versionen av Reg.Exp:arna.

Prova:

```
<?
$str="[b-]nummer 1[/b] lala [b-]nummer 2[/b]\n";
$str = preg_replace("/(\[b-\])(.+?)(\[\/b\])/", "<b>\\2</b>", $str );
echo $str;
?>
```

och resultatet blir: \<b\>nummer 1\</b\> lala \<b\>nummer 2\</b\>

/nicclas <http://www.nic-sys.se> 

\[Redigerat av nicclas den 16 jul 2000\]

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

## #3 — Swey, 2000-07-16T19:46Z

ah... tack

jo, det visste jag nästan men när jag provade ? så fungerade det inte...

är det så stora problem med RegExp i PHP så man måste använda Perls RegExp?

Man kan använda h://, tp:// osv. också. Hur förhindrar man detta?

Mer frågor. ;)
Hur gör man så att HTTP:// och Http:// också fungerar?

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

## #4 — nicclas, 2000-07-16T20:46Z

Hm, börjar bli lite snurrigt blabd Reg.Exp trådarna ;)
Åter till URL konverteringen alltså :)

**h://, tp:// osv. ska förhindras** (vem var det som gjorde ATT de fungerade; bugg!) **och HTTP:// och Http:// ska fungera.**

Prova

```
<?
$body="Matti har htp://www.nic-sys.se/\n som startsida? Clas har tröttnat på [url="httP://www.nic-sys.se"]httP://www.nic-sys.se[/url]  . Nicclas tycker att [url="hTTp://www.allanyheter.com"]hTTp://www.allanyheter.com[/url]  är coolare!\n\n";
$body = preg_replace("/(((?i)http|news|ftp):\/\/([^ \n\r\t]+))/", "<a href=\"\\1\">\\1</a>", $body);
echo $body;
?>
```

är det så stora problem med RegExp i PHP så man måste använda Perls RegExp?
Nja, PHP klarar ju båda formaten. Och det verkar som om Perl-versionen funkar bäst/enklast just för detta.

NicClas
M.sc. Regular expressions       -     <http://www.nic-sys.se/>

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

## #5 — Swey, 2000-07-16T21:52Z

Jo, är nog lite snurrigt :D

Verkar fungera bra hittils men...

$str = preg_replace( "/(?i)(\\\\\[b\\\\\])(.+?)(\\\\\[\\\\/b\\\\\])/", "\<b\>\\\\2\</b\>", $str );

nu fungerar inte detta om  är på en annan rad. Vad är fel?

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

## #6 — Robban, 2000-07-16T22:58Z

Följande bör fungera:

```
$str = preg_replace( "/\[b\](.+?)\[\/b\]/is", "<b>\\1</b>", $str );
```

Anledningen till ditt problem är att '.' inte matchar radmatningar normalt sett. Och lösningen är att ha med flaggan 's' för att få den att göra det. :)

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

## #7 — Swey, 2000-07-16T23:07Z

aha, fan vad komplicerat det blev :D

```
	// Web-addresses
	$str = preg_replace( "/(?i)(mailto:)+(\\S+)/", "<a href=\"\\1\\2\">\\2</a>", $str );
	$str = preg_replace( "/(?i)((http|news|ftp)+:\\/\\/\\S+)/", "<a href=\"\\1\">\\1</a>", $str );

	// [b], [i], [u] => <b>, <i>, <u>
	$str = preg_replace( "/(?i)(\\[b\\])(.+?)(\\[\\/b\\])/is", "<b>\\2</b>", $str );
	$str = preg_replace( "/(?i)(\\[i\\])(.+?)(\\[\\/i\\])/is", "<i>\\2</i>", $str );
	$str = preg_replace( "/(?i)(\\[u\\])(.+?)(\\[\\/u\\])/is", "<u>\\2</u>", $str );

	// [char=character] => &char;
	$str = preg_replace( "/(?i)(\\[char=)(.+?)(\\])/", '&\\2;', $str );

	// [kod] => <code>
	$str = preg_replace( "/(?i)(\\[code\])(.+?)(\\[\\/code\\])/is", "<code>\\2</code>", $str );

	// [line] => <hr>
	$str = preg_replace( "/(?i)\\[line\\]/", "<hr size=1>", $str );
```

Något fel i detta? Verkar fungera :)

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

---

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