0

我的模式是[a-z][\\*\\+\\-_\\.\\,\\|\\s]?\\b

我的结果:

a__
不匹配
a_。
模式匹配 = a_
a._
模式匹配 = a。
a..
模式匹配 = a

为什么我的第一个输入单独不匹配???提前致谢。

[ PS:得到相同的结果 [az][\\*\\+\\-\\_\\.\\,\\|\\s]?\\b ]

4

2 回答 2

2

因为与句号不同.,下划线_被认为是单词字符;一个词也是如此a_,但a.一个词是带标点符号的。

因此,a__matches a,然后 matches _,然后无法匹配单词边界(因为下一个_是同一个单词的一部分)。

a..匹配,跳过字符范围,然后匹配单词和 interpunctiona之间的单词边界。a.

于 2014-11-18T07:23:17.327 回答
2

以“正确的方式”重写正则表达式,即:

"[a-z][*+\\-_.,|\\s]?\\b"

或者,以“未引用”的规范方式:

[a-z][*+\-_.,|\s]?\b

预计您的第一个输入不匹配;一个字符类只会匹配一个字符。在它匹配第一个下划线后,它会寻找一个单词边界,但找不到一个:对于 Java 正则表达式引擎,_它是一个可以成为单词一部分的字符。因此结果。

于 2014-11-18T07:34:14.223 回答