【问题标题】:regular expression word boundary正则表达式词边界
【发布时间】:2011-04-14 02:38:45
【问题描述】:

我正在使用一个简单的正则表达式来匹配单词的开头,使用单词边界匹配器,比如

/(\b)rice/

将匹配“years of rice and salt”,但不匹配“maurice ravel”等。

但是,我找到了一个 !在字符串的开头是否定单词边界匹配器。所以字符串“!!”正在匹配“一些文本!!”。

有人知道为什么会这样吗?没看到是特殊字符。

【问题讨论】:

  • 请包括平台/语言——正则表达式有很多不同。
  • 单独为 '\b' 加上括号有点奇怪;这是一个零宽度指令。但与问题无关。
  • @Hogan:它必须是 PCRE 或近亲(可能实际上是 Perl)。
  • 我正在使用红宝石。为了清楚起见,我只将“\b”括起来。

标签: regex


【解决方案1】:

这是第二个正则表达式吗:?

/\b!!/

如果是这样,那么它应该匹配 '!!'在“一些文字!!”因为在第二个 't' 之后和第一个 '!' 之前有一个单词边界。

(如果没有,我们应该如何猜测?)

【讨论】:

  • 是的,那将是第二个正则表达式。任何以 ! 开头的正则表达式就是我要问的。
【解决方案2】:

t 和 ! 之间存在单词边界,因为 t 是单词字符,! 不是单词字符。 ! 没有什么特别之处,只是你认为它是一个单词字符,但事实并非如此。

由于您不是在处理“单词”,因此单词边界不是您想要的。相反,您可以使用后向断言并检查前一个字符是否为空格、行首或您希望允许作为分隔符的任何其他字符。请注意,并非所有正则表达式引擎都支持后向断言。

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多