SweyMedlem sedan apr. 20003 971 inlägg 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 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 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 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 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 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 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]