[解決済み] 正規表現による複数行のテキストとのマッチング
2022-04-15 12:42:22
質問
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?
解決方法は?
まず、間違った前提でモディファイアを使用しています。
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:
関連
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] 正規表現で変数を使うには?
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] 有効な正規表現を検出するための正規表現はありますか?
-
[解決済み] ユーザー入力文字列を正規表現に変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java.util.NoSuchElementException 原因解析と解決方法
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
IllegalArgumentException この例外を解決する方法
-
プロジェクトの依存関係を解決できなかった 解決
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
このラインで複数のマーカーを解決する方法