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