[解決済み] regex オプションのワードマッチ
2022-03-08 15:23:29
質問
歌手、作詞家を抽出するための正規表現を作ろうとしています。作詞家の検索をオプションにするにはどうしたらよいでしょうか。
複数行の文字列のサンプル。
Fireworks Singer: Katy Perry
Vogue Singers: Madonna, Karen Lyricist: Madonna
Regex:
/Singers?:(.\*)\s?Lyricists?:(.\*)/
これは2行目に正しくマッチし、以下のように抽出されます。
Singers(Madonna, Karen)
と
Lyricists(Madonna)
しかし、リリシストが存在しない最初の行ではうまくいきません。
作詞家検索をオプションにするにはどうしたらいいですか?
解決方法は?
マッチングさせたい部分を、キャプチャしないグループで囲むことができます。
(?:)
. そうすると、正規表現ではひとつのユニットとして扱われ、その後に
?
の後につけて、オプションにすることができます。例
/Singers?:(.*)\s?(?:Lyricists?:(.*))?/
なお、ここでは
\s?
は無意味です。
.*
は貪欲にすべての文字を食べるので、バックトラックは必要ありません。また、このことは
(?:Lyricists?:(.*))
の部分は、同じ理由で決してマッチしません。欲張りでないバージョンの
.*
,
.*?
とともに
$
を使用すると、これを修正することができます。
/Singers?:(.*?)\s*(?:Lyricists?:(.*))?$/
余分な空白が捕捉されてしまいますが、これも削除して、最終的に以下のような正規表現が得られます。
/Singers?:\s*(.*?)\s*(?:Lyricists?:\s*(.*))?$/
関連
-
[解決済み] .*?と.*の正規表現の違いは何ですか?
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] 正規表現の全出現回数をマッチングさせる方法
-
[解決済み] Regex 2つの文字列間のすべての文字にマッチする
-
[解決済み] Regex: 特定のパターン以外のすべてにマッチする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 正規表現におけるスラッシュのエスケープ
-
[解決済み] .*?と.*の正規表現の違いは何ですか?
-
[解決済み] Atomで改行文字を置き換えるには?
-
[解決済み] Regex - ハイフンはエスケープされるべきか?重複
-
[解決済み] 正規表現の末尾にある中括弧内のカンマ区切りの数字は何を意味するのですか?
-
[解決済み] what meas this regex (.*1) [duplicate] (重複)
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 文字列の完全一致のための正規表現
-
[解決済み] 正規表現のメタ文字の違いについて
-
[解決済み] Regex for string contains?