webForumDet fria alternativet

Regexp-problem

6 svar · 471 visningar · startad av Swey

SweyMedlem sedan apr. 20003 971 inlägg
#1

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??

------------------
 - Swey
Projekt wF PHP

[Redigerat av Swey den 16 jul 2000]

nicclasMedlem sedan feb. 20001 050 inlägg
#2

Här 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]

SweyMedlem sedan apr. 20003 971 inlägg
#3

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?

------------------
 - Swey
Projekt wF PHP

[Redigerat av Swey den 16 jul 2000]

[Redigerat av Swey den 16 jul 2000]

nicclasMedlem sedan feb. 20001 050 inlägg
#4

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/

SweyMedlem sedan apr. 20003 971 inlägg
#5

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?

------------------
 - Swey
Projekt wF PHP

RobbanMedlem sedan dec. 19992 555 inlägg
#6

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. :)

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 17 jul 2000]

SweyMedlem sedan apr. 20003 971 inlägg
#7

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 :)

------------------
 - Swey
Projekt wF PHP

[Redigerat av Swey den 17 jul 2000]

136 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)