2016-09-18 7 views
1

正規表現を使ってJavaの文字列に一致するものを見つけようとしていました。実際の正規表現は、私はそれが私が正規表現でJavaの複数行の文字列を検索する

^(interface \\X*!) 

を使用するJava今これはインデックス13の近くに不正な/サポートされていないエスケープシーケンスをスローしないとき、私はボードを少し検索し、それが実際にすべきことがわかっ

^(interface \X*!) 

ですそれを動作させるために4つのバックスラッシュを使用します。しかし、私が使用する場合

^(interface \\\\X*!) 

それは一致を返します。どんなポインタであれ、本当に役に立ちます。

だけでサンプルの試合は、あなたがJavaを使用して、コメントで特定のパターンに一致させるために

interface ABC 
temp 
abc 
xyz 
! 
+0

SHOULDと一致するものの例または説明を提供できますか?あなたは "interface X"や "interface¥X"のような文字列をマッチさせようとしていますか? – mangotang

+0

このコードを使用して、私は試合を取得し、私は例外を取得しない: 'パブリッククラスXXXX { のpublic static無効メイン(文字列[] args){ のString = "\\ Xインターフェース!" ; ブール値b = s.matches( "^(インターフェイス\\ X *!)"); System.out.println(b); }} ' – mangotang

+0

はサンプルを@mangotangするようなものになるだろう: インタフェースABC 一時 ABC XYZ ! –

答えて

1

ようになり、このようなものが動作するはずです:

Pattern p = Pattern.compile("interface[^!]*!", Pattern.DOTALL); 
    Matcher m = p.matcher("interface ABC\ntemp\nabc\nxyz\n!"); // your test string 
    if (m.matches()) { 
     // 
    } 

このパターンは、いずれかと一致"interface"で始まり、 "!"以外に0以上の文字が続き、 "!"で始まる文字列。

Pattern.DOTALLは、他のすべての文字に加えて、 "。"キャリッジリターンと改行にも一致する必要があります。 DOTALLの詳細については、thisを参照してください。

+0

驚くばかり!ブリリアント!正規表現をありがとう!できます。 –

2

\X構文は、Perlから来ている、とJavadoc for java.util.Patternは、明示的にそれがサポートされていないことはPerl 5のセクション比較に述べています。

Javaでは、別の構文を使用する必要があります。しかし、この部分はすでにhttps://stackoverflow.com/a/39561579に返答されています。

関連する問題