我有一个看起来像这样的字符串:
用户用户名
删除了提交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(|)冒号后跟任何东西(但我觉得我错了)。
答案 0 :(得分:1)
修改根据您的评论。
我在?
之后添加*
,这使得它不贪婪。事实上,它抓住了一切到最后一线。
...user (.*?)(: .*)?$
说明:
(.*?) # Match any number of chars as short as possible.
(: .*)? # Match 0 or 1 of : .*.
$ # Match the end of the line.