我想从字母前面的字符串中删除每个!
个字符。为完成此任务,我考虑preg_replace()
执行正则表达式匹配。
也就是说,我希望以下亵渎文字:
search! query ! !key!words that! acc!ept exclamation! marks!
......成为:
search! query keywords that! accept exclamation! marks!
没有必要考虑双重+事件,因为我使用(![!]+)
过滤掉了这些 - 尽管如果有人知道需要考虑双重事件的解决方案,我会非常高兴地欢迎它,因为它不需要额外的查找。
到目前为止,我有(!\b)|(\s+!\s+)|(!\s+!)
- 除了在我看来有点笨拙之外 - 几乎完美地工作,但有时会删除单词之间的间距,产生
search! querykeywords that! accept exclamation! marks!
修改
解析字符串时,我需要考虑重音和/或大写字符。
答案 0 :(得分:2)
答案 1 :(得分:0)
([^a-z])\!+|\!+([a-z])
,替换$1$2
应该匹配多个!前面没有字母(\ W)或者紧跟在(\ w)之后的字母。< / p>
如果您的正则表达式语言采用正向前瞻/后观,那么您可以使用(?<=[^a-z])\!+|\!+(?=[a-z])
而不使用替换字符串。