|
|
|
| вот хочу разобраться в этих иероглифах в Регулярных выражениях:)
что значит # и #si
и правильно ли я составил следующие выражение?
для поиска и замены URL на ссылки
<?php
$text="texthttp://softtime.ru/forum/addthemeform.php?id_forum=6 text";
$text = preg_replace('#http://([\w\/\.\?\&\=]*)#si','<a target="_blank" href="\\1">\\1</a>',$text);
echo"$text";
?>
|
спасибо | |
|
|
|
|
|
|
|
для: GRь)zLI
(30.08.2007 в 18:07)
| | 1) Есть тема про рег выражения
2) # в рег выражении ничего особого не значит. В данном случае - просто ограничитель регулярки. Это могло быть с тем же успехом, классическое /, @ или ~. Иногда использую !.
3) бекслеши избыточны. Внутри класса символов многие спецсимволы теряют свою специальность. ([\w/.?&=\#])+
Потому что * допускает, что вместо всего этого выражения может быть ничего, а + обозначает минимум - 1 символ. Хотя, можно ограничить минимум - 4 символа {4}. Кстати, если поиск нестрогий, то можно было просто
http://([^ ]+)
Так забираются в $1 все непробельные символы. Но зато не проверяется корректность урл...
ЗЫ. У вас не учитываются урлы с локаторами. http://url.ru/page.html?param=value&p=v#123
Добавьте в класс символов #. Если оставите ее в качестве ограничителя регулярки, то ее нужно отескейпить \# | |
|
|
|
|
|
|
|
для: SHAman
(30.08.2007 в 18:35)
| | И ещё вопрос, если есть BBCode:[url]. Как сделать, так что б предыдущее рег. Выражение
пропускало урлы в этих тегах? | |
|
|
|
|
|
|
|
для: GRь)zLI
(30.08.2007 в 19:12)
| | Не понимаю вопроса. Нужно заменять просто урлы на ссылки, а внутри bbcode не трогать что-ли? Если так, то можно добавить просмотр назад
в начале регэкспа (?<![url\s*) | |
|
|
|
|
|
|
|
для: SHAman
(31.08.2007 в 12:04)
| | Назад нельзя смотреть на неопределенную длину ;)
Это я про " * " | |
|
|
|
|
|
|
|
для: GRь)zLI
(30.08.2007 в 19:12)
| | Можно так:
(?:[^\]])и дальше ваша регулярка | |
|
|
|