正则表达式与可选部分进行反向引用

时间:2011-07-15 03:10:03

标签: php regex

我有一个看起来像这样的字符串:

用户用户名

删除了提交1052(主题)

在此字符串之后,可能会有一个冒号,然后是删除的原因。现在,我需要在PHP的preg_replace中进行反向引用,以我想要的方式替换它(在我的例子中,我链接用户名)。我已经尝试了很多表达式,但我似乎无法得到我想要的结果。大多数情况下,我的表达式导致链接在冒号后继续(我希望链接在冒号前停止)。

我现在使用的正则表达式如下所示:

<?php preg_replace("/Submission ([0-9]+) (\(.*\)) was deleted by user (.*)(|: .*)/",'<span style="color:red;">Submission <a href="#">$1</a> $2 was deleted by user <a href="#">$3</a>$4</span>',$string) ?>  

在这里,我基本上认为(|:。*)会检查空字符串OR(|)冒号后跟任何东西(但我觉得我错了)。

1 个答案:

答案 0 :(得分:1)

修改根据您的评论。

我在?之后添加*,这使得它不贪婪。事实上,它抓住了一切到最后一线。

...user (.*?)(: .*)?$

说明:

(.*?)   # Match any number of chars as short as possible.
(: .*)? # Match 0 or 1 of : .*.
$       # Match the end of the line.
相关问题