具有多个表达式的preg_replace

时间:2014-04-26 12:48:26

标签: php regex

我正在开发一个社交网络插件,在提到名称部分我开发了像

这样的脚本
@[mention name](contact: mentio0n user id)

但是在显示时我需要将其重新转换为 Mention_Name ,为此我开发了一个正则表达式

/@+,*[A-za-z0-9_.' @ # ]+,*[(],*[a-zA-Z:]+,*[0-9]+[)]/

preg_replace("/@+,*[a-zA-z0-9.' ]+,*[(],*[contact:]+,*[0-9]+[)]/", 
            "<a style='color:blue;background-color:#FFFF01;' href=\"\.*/@+,*[A-za-z0-9_.' @ # ]+.*/\">\\0</a>",
            '@[user2](contact:402551501) hello @[user3](contact:402551501)');

新的如何将其转换为喜欢

的名称
<a href="id">Name</a>

用户可以在帖子中提及一个以上的人

1 个答案:

答案 0 :(得分:0)

好的,我认为这就是你要找的东西:

$text = preg_replace('/@\[([^]]+)]\(contact:([0-9]+)\)/',
                     '<a href="url/$2">$1</a>', $text);

模式细节:

@
\[          # a literal [ (must be escaped, since it is a special character)
(           # open capture group 1: name
    [^]]+   # character that isn't a ], one or more times 
)           # close capture group 1
]           # a literal ] (no need to escape)
\(          # a literal ( (must be escaped)
contact: 
(           # open capture group 2: id
    [0-9]+  # one or more digits
)           # close capture group2
\)          # a literal ) (must be escaped)

关于替换字符串:

替换字符串不是正则表达式,您不能在里面使用正则表达式符号。与字符串的唯一区别在于您可以使用占位符来引用模式(此处为$1$2)的捕获组