【问题标题】:Regex boundary to also exclude special characters正则表达式边界也排除特殊字符
【发布时间】:2021-11-19 04:55:23
【问题描述】:

我想制作一个正则表达式来匹配一个单词,但如果它的两侧有特殊字符,则不要匹配它。
我尝试在两边都使用单词边界(\b),但它似乎没有排除特殊字符...

例如,这应该可以工作:
text word-to-match more-text

但这不应该:
text word-to-match-more-text
因为在要匹配的单词和更多文本之间有一个-

我现在拥有的是:
(?<=[^-\[\]{}()+?.,\\^$|#])\bword-to-match\b(?=[^-\[\]{}()+?.,\\^$|#])

我想知道是否有更优雅的方式,而不是在单词的两边都使用[^-\[\]{}()+?.,\\^$|#])

提前致谢!

【问题讨论】:

  • 使用负前瞻? (?!...)另外,消极的后视(?<!...)
  • 这样写得不好的问题被这个写得好的问题所欺骗?这个问题是关于Regex whitespace word boundary,而这个问题是Regex boundary to also exclude special characters。不幸的是,欺骗不是由答案的相似性决定的。

标签: regex


【解决方案1】:

如果两边都有非空白字符,您可以在两边使用前瞻和后瞻来使匹配失败:

(?<!\S)word-to-match(?!\S)

RegEx Demo

  • (?&lt;!\S): 如果前一个字符是非空格则失败
  • (?!\S): 如果下一个字符是非空格则失败

【讨论】:

  • 比我使用的要优雅得多,这正是我想要的,谢谢!
猜你喜欢
  • 2020-09-06
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
相关资源
最近更新 更多