JAVA REGEX ::你能解释一下吗?

时间:2014-11-18 07:19:17

标签: java regex word-boundary

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

我的结果:

  

A__
  不匹配的   A_。
  模式匹配= a_
  a._
  模式匹配= a。
  一..
  模式匹配= a

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

[PS:与[a-z] [\\ * \\ + \\ - \\ _ \\。\\,\\ | \\ s]得到相同的结果?\\ b]

2 个答案:

答案 0 :(得分:2)

因为与句点.不同,下划线_被视为单词字符;因此a_是一个单词,但a.是一个带有交互功能的单词。

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

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

答案 1 :(得分:2)

用正确的方式重写正则表达式",即:

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

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

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

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