2010-12-29 3 views
0

Я ищу простую замену [[wiki:Title]] на <a href="/wiki/Title">Title</a>.Замена [[wiki: Название]] со ссылкой на мою wiki

До сих пор у меня есть:

$text = preg_replace("/\[\[wiki:(\w+)\]\]/","<a href=\"/wiki/read/\\1\">\\1</a>", $text); 

Вышеуказанные работы для отдельных слов, но я пытаюсь включать пробелы и в отдельных случаях специальных символов.

Я получаю \w+, но \w\s+ и/или \.+ ничего не делают.

Может ли кто-нибудь улучшить мое понимание основного регулярного выражения? И я не хочу, чтобы кто-то просто указал мне на веб-страницу.

+0

Если вы действительно хотите улучшить свое понимание базовых регулярных выражений, хорошее место, чтобы начать _is_ читать на нем. Поскольку у вас есть конкретный ответ, который вы получили, чтобы избавить вас от неприятностей на этот раз, возможно, теперь вы не будете возражать против предложения полезного сайта? Это IMHO лучшая ссылочная ссылка regex, которую я видел до сих пор, которая охватывает основы до расширенного использования. http://www.regular-expressions.info/tutorial.html – Sepster

ответ

2

\w\s+ означает «символ слова, за которым следует 1 или более пробелов». Вероятно, вы имели в виду (\w|\s)+ («1 или более символов слова или пробела»).

\.+ означает «одна или несколько точек». Вероятно, вы имели в виду .+ (1 или более символов, кроме строк новой строки, если только в однострочном режиме).

Чем более надежный способ состоит в использовании

\[wiki:(.+?)\] 

Это означает, что «1 или более любого характера, но останавливаться на первой позиции, где остальные матчи», то есть остановка на первый правый кронштейн в этом случае. Без? он будет искать самый длинный доступный матч, т. е. за первой скобкой.

+0

Я полагаю, что смутил меня, был порядок \ и?. Я продолжал пытаться поставить? \ W, чтобы найти несколько слов. Спасибо, +. работает. – Bryan

+0

+1. @Bryan отмечает, что \ s не просто соответствует буквальному пространству, он соответствует «пробелу», что означает буквальное пространство _ и tab_.Он также будет соответствовать независимой от платформы новой строке (например, любая комбинация LF и/или CR представляет \ n), если не используется режим многострочного сопоставления, где \ n не будет сопоставляться. – Sepster

0

Вам необходимо использовать \[\[wiki:([\w\s]+)\]\]. Обратите внимание на квадратные скобки вокруг \w\s.

Если вы изучаете регулярные выражения, вы найдете этот сайт полезным для тестирования: http://rexv.org/

0

Вы определенно попасть туда, но у вас есть несколько синтаксических ошибок.

Когда вы используете несколько классов символов, таких как \ w и \ s, чтобы соответствовать внутри этой группы, вы должны поместить их в квадратные скобки, например ... ([\ w \ s] +) это в основном означает одно или несколько слов или пробелов.

Включение обратной косой черты перед периодом ускользает от нее, то есть регулярное выражение выполняет поиск периода.

Что касается соответствия специальным символам, это больше боль. Я пытался придумать что-то быстро, но, надеюсь, кто-то еще может помочь вам в этом.
(Great шпаргалка здесь, я держу копию на моем столе в любое время: http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/)

+0

Мне нравится ответ zeuxcg для любых персонажей :) хотя я бы использовал свой пример над его словами и пробелами. –

+0

Нет шутки, я только что нашел эту страницу. Это сейчас на моем компьютере. Благодарю. – Bryan

Смежные вопросы