java正则表达式X的例子 ,X +和X?
这个问题在这里已经有了答案:
这是我喜欢想到的方式 -
X?? Negative bias, 0 or 1 time - preference to 0 if possible
X? Neutral bias, 0 or 1 time
X?+ Positive bias, 0 or 1 time - preference to 1 if possible,
and if 1 won't give it up (backtrack)
您需要更复杂的模式才能看出差异。
一个贪婪的量词首先尽可能匹配(但回溯)。
不情愿的或“非贪婪的”量词首先尽可能少地匹配。
占有量词与贪婪量词一样,但不会回溯。
使用捕获组来查看发生了什么。
试试字符串b
和bb
上的模式,如(b?)(b+)
, (b??)(b+)
, (b?+)(b+)
。
打印A)如果匹配,B)如果是,那么这些组是什么?
以下是我期望的,但没有测试:
贪婪:在第一种情况下,它应该匹配空白和b
(通过回溯!), b
, b
在第二种情况下匹配。
不情愿:它应该匹配, `b` in the first case,
第二种, `b` in the first case,
bb
。 第一组实际上从来不会匹配任何东西,所以这种模式没有意义。
拥有者:它不应该匹配第一个(没有更多的b
剩下的第二组,并且它不回溯)和b
, b
在第二个字符串中(不需要回溯)。
看看这些例子
System.out.println("abb".matches("abb?b")); // Greedy -> true
System.out.println("abb".matches("abb??b")); // Reluctant -> true
System.out.println("abb".matches("abb?+b")); // Possessive -> false
杉杉二将匹配,因为即使?
会贪心还是不情愿??
第二个b
可以返回并用于匹配找不到该部分的正则表达式的变体。
有趣的事情发生在?+
,这是占有欲,所以当它匹配时,这意味着这部分属于正则表达式的所有格部分,并且不能与其余的正则表达式匹配。 因此,因为第二个b
由b?+
匹配,它不能被最后一个b
正则表达式匹配,这就是为什么matches
返回false
。