我正在尝试从字符串中删除所有前导,尾随和独立的连字符:
-on-line - auction- website
所需结果:
on-line auction website
我想出了一个可行的解决方案:
^-|(?<=\s)-|-(?=\s)|-$
但是在我看来,它有点业余(不是吗?)。那么您有更好的解决方案吗?
您可以使用以下模式:
(?<!\S)-|-(?!\S)
例子:
echo preg_replace('~(?<!\S)-|-(?!\S)~', '', '-on-line - auction- website');
另一种使用条件语句的可能模式: -(?(?!\S)|(?<!\S.))
最后一个很有趣,因为它受益于带有前导文字字符的单个分支。这样,正则表达式引擎能够快速测试字符串中字符出现的位置(由于“正常”正则表达式引擎运行之前的内部优化)。
请注意,条件语句不是强制性的,也可以由添加了的非捕获组替换:
(它不会更改结果,但会更长):
-(?:(?!\S)|(?<!\S.))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句