【发布时间】:2017-08-31 10:21:58
【问题描述】:
我正在尝试编写一个匹配句点不紧跟在列表中的单词之后的正则表达式。
我相信我需要一个前瞻或后向断言来执行此操作,并且我已经尝试过:
/(?!(mr|ms|mrs))\./u 和 /(?!(mr|ms|mrs)\.)\./u
这两个都匹配所有句点,因此不排除单词后面的句点。
我还尝试了一个lookbehind,我相信这是我需要的:
/(?<!(mr|ms|mrs))\./u
但看起来那些必须是固定长度,因为它不会编译:preg_replace(): Compilation failed: lookbehind assertion is not fixed length at offset 15。
这里有几个测试用例,以及使用 preg replace 删除匹配项时的预期结果:
'Mr. Tom A. Suggins' // Mr. Tom A Suggins
'Mrs.. Jane P Suggins, jr.' // Mrs. Jane P Suggins, jr
'.Ms.. .Jane P. Suggins' // Ms. Jane P Suggins
在没有可变长度后向支持的情况下,有没有办法在 PHP 中做到这一点?
【问题讨论】: