Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式X的示例,X?&x2B;还有X?_Java_Regex - Fatal编程技术网

java正则表达式X的示例,X?&x2B;还有X?

java正则表达式X的示例,X?&x2B;还有X?,java,regex,Java,Regex,有人能用java示例来说明X?、X?+和X???之间的区别吗。 其中X?,X?+和X???是java.util.regex.Pattern 对于所有三种模式,他们给出了相同的解释(X,一次或根本不解释) 参考文献 我在互联网上找不到好的例子 注意:今天早上我在这里问了部分问题:,因为我又更新了帖子看看这些例子 System.out.println("abb".matches("abb?b")); // Greedy -> true System.out.println("abb"

有人能用java示例来说明
X?
X?+
X???
之间的区别吗。 其中
X?
X?+
X???
java.util.regex.Pattern

对于所有三种模式,他们给出了相同的解释(
X
,一次或根本不解释) 参考文献

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


注意:今天早上我在这里问了部分问题:,因为我又更新了帖子

看看这些例子

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
可以返回并用于匹配未找到此部分的regex变量


有趣的事情发生在所有格的
?+
中,所以当它匹配某个东西时,就意味着这部分属于正则表达式的所有格部分,不能被正则表达式的其余部分匹配。因此,因为第二个
b
b?+
匹配,所以它不能与最后一个
b
regex匹配,这就是为什么
匹配
返回
false
看看这些示例

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
可以返回并用于匹配未找到此部分的regex变量


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

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

  • 贪婪的量词首先匹配尽可能多的内容(但要回溯)

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

  • 所有格量词和贪婪量词一样,但它不会后退

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

在字符串
b
bb
上尝试
(b+)
(b+)(b+)
等模式

打印A)如果匹配,和B)如果匹配,组是什么

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

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

不情愿:它应该在
上匹配,第一种情况下为'b',第二种情况下为
bb
。第一组实际上永远不会匹配任何东西,因此这种模式没有意义


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

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

  • 贪婪的量词首先匹配尽可能多的内容(但要回溯)

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

  • 所有格量词和贪婪量词一样,但它不会后退

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

在字符串
b
bb
上尝试
(b+)
(b+)(b+)
等模式

打印A)如果匹配,和B)如果匹配,组是什么

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

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

不情愿:它应该在
上匹配,第一种情况下为'b',第二种情况下为
bb
。第一组实际上永远不会匹配任何东西,因此这种模式没有意义


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

我喜欢这样想-

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)

我喜欢这样想-

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)

您可以使用一个更相关的示例,如使用
aababba
,并使用模式
ab?
ab?++
ab???
想要了解java api docDerp中给出的模式的基础知识。我做了一个错误的假设。忽略我之前说过的话(现在是nuked)。强烈建议你自己去试试正则表达式。有很多免费的在线网站,你可以在那里测试正则表达式,看看a)它们做什么,B)调试它们。我个人用的是反正。文档说它们是位置量词,谷歌搜索这一点给了我这个页面,这似乎是一个很好的资源:基本上,它们是贪婪的量词,只是re引擎不会回溯到它们。你可以使用一个更相关的例子,比如使用
aababba
,然后使用模式
ab?
ab?+
ab???
想了解java api docDerp中给出的模式的基础知识。我做了一个错误的假设。忽略我之前说过的话(现在是nuked)。强烈建议你自己去试试正则表达式。有很多免费的在线网站,你可以在那里测试正则表达式,看看a)它们做什么,B)调试它们。我个人用的是反正。文档说它们是有位置的量词,谷歌搜索这一点给了我这个页面,这似乎是一个很好的资源:基本上,它们是贪婪的量词,除了re引擎不会回溯到它们上面。+1是简单的答案:)无论如何在
X中1是首选,但出于更大的原因,它也将接受0并放弃匹配的部分。我喜欢将中性作为从左到右处理的基础。在这个月