该模式来自以下代码段。
private static Pattern specialDoubleRegex = Pattern.compile("((-)?infinityd?)|(nand?)", Pattern.CASE_INSENSITIVE);
我是初学者。我开始使用Pattern类编写自己的正则表达式。我在Java code example中看到了这个示例。我并不完全理解它们。我们是否使用特殊构造(?<name>X)
?
根据{{3}}和Javase 7文档,“ infinityd?”在这里不是特殊的构造。 (-)?infinityd?
是什么?
我可以说它们是类似于((X)?XY?)|(X?)
模式的模式吗?
答案 0 :(得分:1)
不,这些是常规的问号,使上一个字符或组成为可选。
(-)?infinityd?
匹配“无穷大”,前面带有可选的负号和可选的结尾“ d”。如果存在减号,则将其捕获到组2中。
infinity
infinityd
-infinity
-infinityd
nand?
将“ nan”与可选的结尾“ d”匹配。
nan
nand
答案 1 :(得分:0)
我们是否使用特殊构造
(?<name>X)
?
为清楚起见,javadoc中针对Pattern
所述的“特殊构造(命名为捕获和非捕获)” 包括一个(
然后是?
。
在您的示例中,?
符号跟在其他某个字符之后。如
John解释说,在每种情况下,它们都是简单的(贪婪的)量词。