[解決済み】Regexオプションのキャプチャグループ?
2022-03-17 16:17:04
質問
何時間も検索した後、私はこの質問をすることにしました。なぜこの正規表現では
^(dog).+?(cat)?
は、私が考えているように動作するのでしょうか(つまり、最初の犬と猫があればそれを捕捉する)?私はここで何を見逃しているのでしょうか?
dog, cat
dog, dog, cat
dog, dog, dog
解決方法は?
を取得できないのは、オプションの
cat
の後に、不本意ながら
.+?
は、オプションかつ非固定的であるということです:エンジンはそのマッチングを強制されません。
cat
の末尾として扱われます。
.+?
シーケンスになります。
猫を文字列の末尾に固定する場合、すなわち
^(dog).+?(cat)?$
を使えば、マッチするはずですが。
Pattern p = Pattern.compile("^(dog).+?(cat)?$");
for (String s : new String[] {"dog, cat", "dog, dog, cat", "dog, dog, dog"}) {
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(1)+" "+m.group(2));
}
}
これは、印刷する( デモ1 )
dog cat
dog cat
dog null
万が一、猫の後に何かあった時の対処法をご存知ですか?
を除くすべてのものにマッチする、よりトリッキーな式を構築することで対処できます。
cat
, こんな感じです。
^(dog)(?:[^c]|c[^a]|ca[^t])+(cat)?
ここで
cat
は、アンカーがなければ文字列のどこにでも発生する可能性があります (
デモ2
).
関連
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] 米国通貨RegExの "ベスト "は何か?
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] なぜJava 8のOptionalは引数で使ってはいけないのか
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み] 貪欲 vs. 渋い vs. 所有格の修飾語
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] DartでRegExを使うには?
-
[解決済み] この正規表現に負の小数点を含めるにはどうしたらよいですか?
-
[解決済み] (grep) 非 ASCII 文字にマッチする正規表現ですか?
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?
-
[解決済み] grepで星座を使う
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] 正規表現におけるワードバウンダリとは何ですか?
-
[解決済み] Regex - 特定の文字が含まれていません。