Копилка регулярных выражений
Misha v.3 [23 мая 2002]
Некоторые регулярные выражения, которые используются сейчас в форуме я решил привести на этой страничке.
Замена [b]болд[/b] или [i]италик[/i] на <b>болд</b> и т.д. :
$text[^text.match[\[([biu])\](.+?)\[/\1\]][gi]{<$match.1>$match.2</$match.1>}]
Замена [quot]квотинг[/quot] или [quote]квотинг[/quote] на <blockquote>квотинг</blockquote>:
$text[^text.match[\[(quote?)\](.+?)\[/\1\]][gi]{<blockquote>$match.2</blockquote>}]
Замена [color="red"]текст[/color] на <font color="red">текст</font>:
$text[^text.match[\[(color)=("?)([^^"]+?)\2\](.+?)\[/\1\]][gi]{<font color="${match.3}">${match.4}</font>}]
Автообрамление url:
@matchHrefs[text]
$result[^if(def $text){^text.match[(?<![="])((?:http://|ftp://|mailto:)(?:[:\w~%{}./?=&@,#-]+))(?<![.:])(?!"<)][gi]{<a href="$match.1">$match.1</a>}}]
#end @matchHrefs[]
Замена [url="http://www.w3c.org/"]ссылки тут[/url] на <a href="http://www.w3c.org/">ссылки тут</a>:
$text[^text.match[\[(url)=("?)(.{9,}?)\2\](.+?)\[/\1\]][gi]{<a href="${match.3}">${match.4}</a>}]
Имейте ввиду, что все эти регулярные выражения на сайте используются в несколько измененном виде, т.к. я работая с данными сообщений, не знаю что такое <font> и т.д., я формирую xml, а в дальнейшем он преобразуется к тому, что "видит" ваш броузер, поэтому, исправляя эти выражения вручную, я мог ошибиться.
Далее, $text приходит мне из базы данных, т.е. по понятиям p3 он "грязный" (taint). Именно поэтому парсер перед выдачей его броузеру будет делать преобразования < - < и т.д., таким образом обычные теги, которые кто-либо запостил в сообщение, туда не пройдут.
Когда я делаю match, то я вставляю буквы, изображающие те-же теги, но они вставляются "чистыми" (парсер сам их вставляет, поэтому он им доверяет, и они будут переданы броузеру как есть [as-is]... подробности читайте в документации... :)