我想使用 PHPpreg_replace()
在文本中搜索某个单词的出现,并将该单词括在括号中,除非已经存在括号。这里的挑战是我想测试可能与我正在寻找的文本直接相邻或不直接相邻的括号。
随机示例:我想替换warfarin
为[[warfarin]]
- 在这个字符串中:
Use warfarin for the prevention of strokes
- 但不在此字符串中:(
Use [[warfarin]] for the prevention of strokes
括号已存在) - 也不在这个字符串中:(
Use [[generic warfarin formulation]] for the prevention of strokes
'remote' 括号已经存在)
我可以使用lookbehind 和lookahead 断言来满足前两个要求:
php > echo preg_replace( "/(?<!\[\[)(warfarin)(?!]])/", "[[$1]]", "Use warfarin for the prevention of strokes" );
Use [[warfarin]] for the prevention of strokes
php > echo preg_replace( "/(?<!\[\[)(warfarin)(?!]])/", "[[$1]]", "Use [[warfarin]] for the prevention of strokes" );
Use [[warfarin]] for the prevention of strokes
但是我需要您对第三个要求的帮助,即当存在“远程”括号时不要添加括号:
php > echo preg_replace( "/(?<!\[\[)(warfarin)(?!]])/", "[[$1]]", "Use [[generic warfarin formulation]] for the prevention of strokes" );
Use [[generic [[warfarin]] formulation]] for the prevention of strokes
在最后一个示例中,不应将方括号添加到单词中,warfarin
因为它包含在已包含在括号中的较长表达式中。
问题是 PHP 的正则表达式断言必须有固定的长度,否则会很简单。
我正在使用
PHP 5.3.10-1ubuntu3.1 with Suhosin-Patch (cli) (built: May 4 2012 02:20:36)
提前致谢!