正则表达词边界和特殊字符

时间:2010-07-13 21:27:26

标签: regex

我有一个正则表达式来转义搜索字符串中的所有特殊字符。这很好用,但我似乎无法使用单词边界。例如,使用haystack

add +

add (+)

和针

+

正则表达式/\+/gi与“+”匹配。但是正则表达式/\b\+/gi没有。关于如何使这项工作的任何想法?

使用

add (plus)

作为干草堆,/\bplus/gi作为正则表达式,它匹配得很好。我无法弄清楚为什么逃脱的角色有问题。

3 个答案:

答案 0 :(得分:5)

\b是一个零宽度断言:它不消耗任何字符,只是声明某个条件在给定位置成立。单词边界断言位置前面有一个单词字符,后面没有一个单词,或后跟一个单词字符,前面没有一个字符。 (“单词字符”是字母,数字或下划线。)在您的字符串中:

add +

...开头有一个单词边界,因为a前面没有单词字符,并且在第二个d之后有一个单词边界,因为它后面没有单词字符。正则表达式中的\b/\b\+/)正在尝试在空格和+之间进行匹配,这不起作用,因为这些都不是单词字符。

答案 1 :(得分:1)

尝试将其更改为:

/\b\s?+/gi

编辑:

根据需要扩展此概念。如果你想要任何单词边界之后的第一个+:

/\b[^+]*+/gi

答案 2 :(得分:1)

边界是非常有条件的断言;他们锚定的东西取决于他们触摸的东西。有关详细说明,请参阅this answer,以及您可以采取的其他措施。