0

X?有人可以给出,X?+X??java 示例之间的区别吗?哪里和是。X?_X?+X??java.util.regex.Pattern

对于所有三种模式,他们给出了相同的解释(X一次或根本没有)参考http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

我无法在互联网上找到好的例子

注意:今天早上我在这里问了一部分问题:模式X有什么区别?和X?,因为我有一个更新的帖子再次发布

4

3 回答 3

3

这是我喜欢思考的方式——

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)
于 2013-09-12T17:23:54.317 回答
1

Take a look at these examples

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

Firs two will match because even if ? will be greedy or reluctant ?? second b can be returned and used to match variant of regex where this part wasn't found.

Interesting thing happens in ?+ which is possessive so when it match something then it means that this part belongs to possessive part of regex, and cant be matched by rest of regex. So because second b is matched by b?+ it cant be matched by last b regex, that is why matches returns false.

于 2013-09-12T17:10:05.267 回答
1

您需要更复杂的模式才能看到差异。

  • 贪心量词首先尽可能匹配(但回溯)。

  • 一个不情愿或“非贪婪”的量词首先尽可能少地匹配。

  • 所有格量词就像贪婪量词一样,但它不会回溯。

使用捕获组来查看正在发生的事情。

在字符串和. 上尝试诸如(b?)(b+), (b??)(b+),之类的模式。(b?+)(b+)bbb

打印 A) 如果匹配,并且 B) 如果匹配,那么组是什么?

以下是我所期望的,但没有测试:

贪婪:它应该匹配空,b在第一种情况下(通过回溯!),bb第二种情况下。

不情愿:它应该匹配 on , `b` in the first case,,bb在第二个。第一组实际上永远不会匹配任何东西,所以这种模式没有意义。

占有:它不应该匹配第一个(第二组不再b剩下,并且它不回溯)和bb在第二个字符串中(不需要回溯)。

于 2013-09-12T17:18:51.253 回答