正規表現を使用して複数行のテキストを一致させる 質問する

正規表現を使用して複数行のテキストを一致させる 質問する

Javaを使用して複数行のテキストを一致させようとしています。修飾子Pattern付きのクラスを使用するとPattern.MULTILINE一致させることができますが、(?m).

(?m)およびを使用した同じパターンはString.matches機能しないようです。何かが足りないのは確かですが、何が足りないのかはわかりません。

私が試したのはこれです:

String test = "User Comments: This is \t a\ta \n test \n\n message \n";
        
String pattern1 = "User Comments: (\\W)*(\\S)*";
Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);
System.out.println(p.matcher(test).find());  //true

String pattern2 = "(?m)User Comments: (\\W)*(\\S)*";
System.out.println(test.matches(pattern2));  //false - why?

ベストアンサー1

まず、修飾語を間違った前提で使用しています。

Pattern.MULTILINEまたは、(?m)Java にアンカーを受け入れ^$各行の先頭と末尾で一致させるように指示します (そうでない場合は、文字列全体の先頭と末尾でのみ一致します)。

Pattern.DOTALLまたは、(?s)ドットが改行文字と一致することも許可するように Java に指示します。

第二に、あなたの場合、matches()正規表現が一致することを期待するメソッドを使用しているため、正規表現は失敗します。全体(\\W)*(\\S)*文字列 -一致した後にいくつかの文字が残っているため、もちろん機能しません。

で始まる文字列を探しているだけならUser Comments:、正規表現を使ってください。

^\s*User Comments:\s*(.*)

オプションPattern.DOTALL:

Pattern regex = Pattern.compile("^\\s*User Comments:\\s+(.*)", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group(1);
} 

ResultStringすると、次のテキストが含まれUser Comments:

おすすめ記事