来自这篇维基文章:正则表达式
例如,在正则表达式中
a.
,a
是仅匹配“a”的文字字符,而.
是匹配除换行符之外的每个字符的元字符。因此,此正则表达式匹配,例如,a
, orax
, ora0
。
但在 java 程序中,我看到点( .
) 与零出现次数不匹配。
System.out.println (Pattern.matches("geeksforge.ks", "geeksforgeks")); //false
System.out.println (Pattern.matches("geeksforge.", "geeksforge")); //false
- 引用的文本(来自 wiki)指的是正则表达式的哪种变体?
- 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 语法,但您需要阅读文档以了解差异以及支持和不支持的内容。