用我的wiki链接替换[[wiki:Title]]

时间:2010-12-29 20:57:30

标签: php regex

我正在寻找将[[wiki:Title]]简单替换为<a href="/wiki/Title">Title</a>

到目前为止,我有:

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

以上适用于单个单词,但我试图包含空格,有时也包含特殊字符。

我收到\w+,但\w\s+和/或\.+没有做任何事情。

有人可以提高我对基本正则表达式的理解吗?我并不是说让任何人只是简单地指向一个网页。

3 个答案:

答案 0 :(得分:2)

\w\s+表示“单词字符,后跟1个或多个空格”。你可能意味着(\w|\s)+(“一个或多个单词字符或空格字符”)。

\.+表示“一个或多个点”。您可能意味着.+(任何字符中的一个或多个 - 除了换行符,除非在单行模式下)。

更强大的方法是使用

\[wiki:(.+?)\]

这意味着“任何一个或多个角色,但在其余部分匹配的第一个位置停止”,即在这种情况下停在第一个右括号。没有?它会寻找最长的可用匹配 - 即超过第一个支架。

答案 1 :(得分:0)

您需要使用\[\[wiki:([\w\s]+)\]\]。注意\w\s附近的方括号。

如果您正在学习正则表达式,您会发现此网站对测试非常有用:http://rexv.org/

答案 2 :(得分:0)

你肯定会到达那里,但是你有一些语法错误。

当你使用多个字符类如\ w和\ s时,为了在该组内匹配,你必须将它们放在[方括号]中,如此...([\ w \ s] +)这基本上意味着一个或多个单词或空格
在期间前面加一个反斜杠就逃脱了,这意味着正则表达式正在寻找一段时期
至于匹配特殊字符,这更令人痛苦。我试图快速提出一些事情,但希望其他人可以帮助你 (这里有很棒的备忘单,我随时都会在桌面上保留一份副本:http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/