1

好的,所以这与我之前的一个问题有关。一般来说,我对 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:

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

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

4

1 回答 1

2

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

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

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

于 2013-01-22T15:43:06.643 回答