对于正则表达式(456)\b
和输入123456 xyz
,它可以正常工作,输出为456。Case 1.。
对于几乎相同的正则表达式(456)#\b
和输入123456# xyz
,我希望输出为456#
。因为\b
在匹配#
之后仍应与行尾匹配。
但是正则表达式引擎找不到匹配项。 Case 2。
奇怪的是,它适用于正则表达式 (456)#\B
。请注意此正则表达式中的非单词边界 \ B 。 Case 3。 \B
在这里匹配什么?
我经历了This answer for understanding \b and \B
,似乎我的理解是正确的。
那为什么奇怪呢?我在这里想念什么?为什么\B
在情况2和情况3不能工作时\b
工作?
答案 0 :(得分:1)
单词字符是a-z,A-Z,0-9中的字符,包括_ (下划线)字符。
因此#不是单词字符,因此后面没有单词边界
答案 1 :(得分:1)
单词边界使用以下正则表达式-(^\w|\w$|\W\w|\w\W)
声明位置。 [a-zA-Z0-9_]
因此,在您的情况下,对于正则表达式(456)#\b
,尝试匹配字符串123456# xyz
将会失败,因为#及其后面的空格都是非单词(必须是一个单词和一个边界的非单词),因此不满足上述正则表达式。
有趣的是,如果您尝试在字符串中的#之后添加一个单词,例如说123456#b xyz
,它就会匹配,就像显示的here
答案 2 :(得分:0)
单词边界\b
被定义为单词和非单词字符之间的点。假设使用标准C语言环境,则#和空格都是非单词字符,因此它们之间没有单词边界。