このWiki記事から:正規表現
たとえば、正規表現で「a」のリテラル文字のみを一致させるのではなく、
a.
メタ文字は改行文字を除くすべての文字と一致します。したがって、この正規表現は、、または、またはと一致します。a
.
a
ax
a0
しかし、Javaプログラムでは、dot(.
)が0のエントリと一致しないことがわかります。
System.out.println (Pattern.matches("geeksforge.ks", "geeksforgeks")); //false
System.out.println (Pattern.matches("geeksforge.", "geeksforge")); //false
- wikiで引用されたテキストは正規表現のどのようなバリエーションを参照していますか?
- Javaはどの正規表現バリアントを使用しますか?
私はPOSIXとPerlという正規表現の2つのバリエーション/構文を知っています。しかし、もっと多くのバリエーションがあるのか、どの言語がどの言語を使用しているのかはわかりませんか?
答え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の両方の構文をサポートしていますが、違いとサポートされているものとサポートされていないことを理解するには、ドキュメントを読む必要があります。