1

我正在尝试用链接替换文本文件中出现的某些字符串。一些实体由多个单词组成,即它们是中间有空格的字符串。我本质上是在寻找一个考虑到标点​​符号并且不区分大小写的正则表达式。我的“解决方案”似乎只是绕圈子,而我的正则表达式知识还不够好:(

$pattern = '/[ ._*&^%$#!?!]Anthony Anderson[ ._*&^%$#!?!]/i';

$replacement = '[[Tony Anderson]]';

$subject = 'Anthony anderson. (born August 15, 1970) is an actor, comedian, and writer. He has starred ... the ANTHony Anderson, as well as in Fox sitcom. anthony Anderson. Anthony aNderson? !Anthony AnderSon. Anthony    Anderson. . anthony
anderson. Anthony Andersoneon should not match neither should Santhony Anderson ';

echo preg_replace($pattern, $replacement, $subject, -1 );

让我这么远:

安东尼安德森。(生于 1970 年 8 月 15 日)是一名演员、喜剧演员和作家。他出演过……安东尼·安德森,以及福克斯情景喜剧。[[托尼·安德森]][[托尼·安德森]] [[托尼·安德森]]安东尼·安德森。. 安东尼·安德森。安东尼安德森不应该匹配,桑索尼安德森也不应该匹配

但我追求的是:

[[托尼·安德森]]。(生于 1970 年 8 月 15 日)是一名演员、喜剧演员和作家。他出演了……[[托尼·安德森]],以及福克斯情景喜剧。[[托尼·安德森]]。[[托尼·安德森]]?![[托尼·安德森]]。[[托尼·安德森]]。. [[托尼·安德森]]。安东尼安德森不应该匹配,桑索尼安德森也不应该匹配

我错过了什么?

4

1 回答 1

2

我认为您想使用单词边界来匹配,\b. 这包括非单词字符,但也包括字符串的开头或结尾:

/\bAnthony Anderson\b/i
于 2013-02-17T00:05:29.673 回答