java正则表达式X的例子 ,X +和X?

这个问题在这里已经有了答案:

  • 贪婪与不愿意与拥有量词7答案

  • 这是我喜欢想到的方式 -

    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)
    

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

  • 一个贪婪的量词首先尽可能匹配(但回溯)。

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

  • 占有量词与贪婪量词一样,但不会回溯。

  • 使用捕获组来查看发生了什么。

    试试字符串bbb上的模式,如(b?)(b+)(b??)(b+)(b?+)(b+)

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

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

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

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

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


    看看这些例子

    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可以返回并用于匹配找不到该部分的正则表达式的变体。

    有趣的事情发生在?+ ,这是占有欲,所以当它匹配时,这意味着这部分属于正则表达式的所有格部分,并且不能与其余的正则表达式匹配。 因此,因为第二个bb?+匹配,它不能被最后一个b正则表达式匹配,这就是为什么matches返回false

    链接地址: http://www.djcxy.com/p/76895.html

    上一篇: Example for java regex X?? ,X?+ and X?

    下一篇: What exactly does .*? do in regex? ".*?([a