php preg_match多种模式

时间:2013-12-31 11:53:33

标签: php regex

我需要在文本中找到这样的字符串@ [0000:0000:Username]。

然后我需要提取第一个数字序列(user-id)和用户名。 然后我需要用链接替换它们。

我能够提取第一个数字序列,但用户名是可变的。它可以有多个单词(和空格),但它也可以是单个单词,例如“John”,“John Doe”,“John Doe Junior”。

用户名可以包含字母数字字符,句点,下划线和短划线。

这就是我现在拥有的用户名,最多4个字:

/@\[(\d*):\d*:(\S*|\S*\s*\S*\s*\S*\s*\S*)\]/

这是我想要创建的链接:

<a href="http://www.facebook.com/user-id/" target="_blank">Username</a>

我试着这样:

<a href="http://www.facebook.com/$1/" target="_blank">$2</a>

如果只找到一个匹配项,则可以正常工作。只要有更多的匹配它就会混乱。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

/@\[(\d+):\d+:([^\]]+)\]/

[^]]搜索所有不是]的字符,所以基本上都是最终的所有字符

答案 1 :(得分:0)

尝试:

/@\[(\d*):\d*:([\w. \-]*)\]/m

[\w. \-]匹配字母,数字,下划线,句号,空格和短划线。 *之后允许任意数量的这些。

答案 2 :(得分:0)

@\[(\d+):\d+:([-\w. ]+)\]

Live demo