正则表达式点的不同行为?

正则表达式点的不同行为?

来自这篇维基文章:正则表达式

例如,在正则表达式中a.a是仅匹配“a”的文字字符,而.是匹配除换行符之外的每个字符的元字符。因此,此正则表达式匹配,例如,a, or ax, or a0

但在 java 程序中,我看到点( .) 与零出现次数不匹配。

System.out.println (Pattern.matches("geeksforge.ks", "geeksforgeks"));    //false
System.out.println (Pattern.matches("geeksforge.",  "geeksforge"));       //false
  1. 引用的文本(来自 wiki)指的是正则表达式的哪种变体?
  2. java 使用哪种正则表达式变体?

我知道正则表达式至少有两种变体/语法 - POSIX 和 Perl。但不确定是否还有更多变体以及哪些语言使用其中哪些变体?

答案1

根据最新的Java API 文档,点 ( .) 字符匹配“任何字符(可能或可能不匹配行终止符)”。它并没有说它将匹配零次出现。阅读链接的文章后,它也没有说明该点将匹配零次出现。

要使正则表达式匹配零次出现,您需要使用星号 ( *) 或问号 ( ?) 量词,因为它们专门匹配其前面的字符零次或多次出现:

System.out.println (Pattern.matches("geeksforge.?ks", "geeksforgeks")); //true
System.out.println (Pattern.matches("geeksforge.?",  "geeksforge"));    //true
System.out.println (Pattern.matches("geeksforge.*ks", "geeksforgeks")); //true
System.out.println (Pattern.matches("geeksforge.*",  "geeksforge"));    //true

根据文档,java正则表达式支持 Perl 和 POSIX 语法,但您需要阅读文档以了解差异以及支持和不支持的内容。

相关内容