我的模式是[a-z][\\*\\+\\-_\\.\\,\\|\\s]?\\b
我的结果:
a__
不匹配
a_。
模式匹配 = a_
a._
模式匹配 = a。
a..
模式匹配 = a
为什么我的第一个输入单独不匹配???提前致谢。
[ PS:得到相同的结果 [az][\\*\\+\\-\\_\\.\\,\\|\\s]?\\b ]
我的模式是[a-z][\\*\\+\\-_\\.\\,\\|\\s]?\\b
我的结果:
a__
不匹配
a_。
模式匹配 = a_
a._
模式匹配 = a。
a..
模式匹配 = a
为什么我的第一个输入单独不匹配???提前致谢。
[ PS:得到相同的结果 [az][\\*\\+\\-\\_\\.\\,\\|\\s]?\\b ]
因为与句号不同.
,下划线_
被认为是单词字符;一个词也是如此a_
,但a.
一个词是带标点符号的。
因此,a__
matches a
,然后 matches _
,然后无法匹配单词边界(因为下一个_
是同一个单词的一部分)。
a..
匹配,跳过字符范围,然后匹配单词和 interpunctiona
之间的单词边界。a
.
以“正确的方式”重写正则表达式,即:
"[a-z][*+\\-_.,|\\s]?\\b"
或者,以“未引用”的规范方式:
[a-z][*+\-_.,|\s]?\b
预计您的第一个输入不匹配;一个字符类只会匹配一个字符。在它匹配第一个下划线后,它会寻找一个单词边界,但找不到一个:对于 Java 正则表达式引擎,_
它是一个可以成为单词一部分的字符。因此结果。