正则表达式删除空格并更改标点符号?

时间:2013-01-22 15:38:20

标签: php regex

好的,所以这与之前的问题有关。我对PHP一般都很陌生,只需要修复别人为我的论坛工作的东西。

这就是我目前所拥有的:

// Alter post output to create links to user profiles
$post->message = preg_replace(
   '/@ *('.preg_quote($speak['username'], '/').')[:,.]? */i',
'[url=\''.PAGE_URL.RELATIVE_WBB_DIR.'/index.php?'
. 'page=User&userID='.$speak['toID'].'\']@'.$ speak['username'].':[/url]',
                              $post->message);

这应该改变:

@JamesNorris, @JamesNorris: @JamesNorris

到用户个人资料链接,确实如此。唯一的问题是它做出的另一个改变是:

@JamesNorris:@JamesNorris:@JamesNorris:

这是之前给出的那一行的输出。 显然它正在删除','和空格,并放置':'。

有没有人对如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:2)

您可以将,:.捕获为自己的组,并在替换中引用该组:

('preg_quote(...)')([:,. ])? */i',
   '[url...'.$speak['username'].'\2[/url]'

\2是第二组中捕获的内容(冒号,逗号,句号,空格)。它是\2,因为您已经有另一个用户名捕获组(您不使用)。