如何在Java代码示例中了解正则表达式模式?

时间:2018-07-22 00:27:02

标签: java regex

该模式来自以下代码段。

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?)模式的模式吗?

2 个答案:

答案 0 :(得分:1)

不,这些是常规的问号,使上一个字符或组成为可选。

  • (-)?infinityd?匹配“无穷大”,前面带有可选的负号和可选的结尾“ d”。如果存在减号,则将其捕获到组2中。

    infinity
    infinityd
    -infinity
    -infinityd
    
  • nand?将“ nan”与可选的结尾“ d”匹配。

    nan
    nand
    

答案 1 :(得分:0)

  

我们是否使用特殊构造(?<name>X)

为清楚起见,javadoc中针对Pattern所述的“特殊构造(命名为捕获和非捕获)” 包括一个(然后是?

在您的示例中,?符号跟在其他某个字符之后。如 John解释说,在每种情况下,它们都是简单的(贪婪的)量词。