[解決済み】2つの名前を任意の順序で含む文字列をマッチさせる正規表現
質問
正規表現で論理的なANDが必要です。
のようなものです。
ジャックとジェームス
以下の文字列に同意する
-
ハイ ジャック 以下は ジェームス '
-
「ハイ ジェームス 以下は ジャック '
解決方法は?
を使用してチェックすることができます。 正のルックアヘッド . 以下は、このサイトに掲載されている要約です。 正規表現.info :
<ブロッククオートlookaheadとlookbehindは、総称して「見回し」と呼ばれていますが、これは 長さ0のアサーション...lookaroundは実際に文字をマッチングするが は、マッチングをあきらめ、マッチするかしないかの結果だけを返す。 これが「アサーション」と呼ばれる所以である。これらは 文字列中の文字が一致するかどうかだけを主張します。 である。
そして、正のルックアヘッドは次のように説明されています。 アサート を使わずに、その後に続くものがある特定の式にマッチすること。 を取る の文字が含まれます。
そこで、フレーズがマッチすることを主張するために、後続の2つのポスティブ・ルックヘッドを使用する式を以下に示します。
jack
と
james
のどちらかを選択します。
^(?=.*\bjack\b)(?=.*\bjames\b).*$
で始まる括弧内の式は
?=
は正のルックヘッドである。パターンを分解してみる。
-
^
は、マッチする式の開始をアサートします。 -
(?=.*\bjack\b)
は最初の肯定的な先読みを意味し、その後に続くものが.*\bjack\b
. -
.*
は、任意の文字が0回以上繰り返されることを意味します。 -
\b
は、任意の単語境界(空白、表現の開始、表現の終了など)を意味します。 -
jack
は文字通り、この4文字が並んでいるものです。james
を、次の正のルックアヘッドで表示します)。 -
$
は、式の末尾にマッチしたことを表明します。
つまり、最初のルックヘッドは、"続くもの(それ自体はルックヘッドでもルックビハインドでもない)は、0個以上の任意の文字で始まり、単語境界が続く式でなければならず、次に
jack
と別の単語境界," そして2つ目の先読みは "次のものは、0個以上の任意の文字で始まり、単語境界が続く式でなければならず、次に
james
という2つの単語境界があります。
.*
は単純に任意の文字に0回以上マッチし
$
は、式の末尾にマッチする。
"何々で始まり、jack または james で終わり、何々で終わる" は、最初のルックヘッドを満たしますが、その後にいくつかの文字があるため、単語
jack
を含む)であるため、2つ目のルックヘッドを満たします。
jack
という単語は、2つ目のルックヘッドを満たすために必要ではありません。
james
. どちらのルックヘッドも式の終わりを主張しないので
.*
のように、ルックヘッドを満足させる範囲を超えることができる。
お分かりいただけたと思いますが、念のため、以下は
jack
と
james
を逆にした場合、つまり "anythingで始まり、jamesまたはjackで終わり、anything" で終わる場合、その後に文字数があるので最初の見栄えを満たします。
james
を含む)であるため、2つ目のルックヘッドを満たします。
james
という単語は、2つ目のルックヘッドを満たすために必要ではありません。
jack
. 先ほどと同様に、どちらのルックヘッドも式の終わりを主張しないので
.*
のように、ルックヘッドが満足する範囲を超えることができます。
この方法は、複数の条件を簡単に指定できるという利点がある。
^(?=.*\bjack\b)(?=.*\bjames\b)(?=.*\bjason\b)(?=.*\bjules\b).*$
関連
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] YAML の文字列を複数行に渡って分割するには?
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] \0-9]よりも効率が悪い
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Vimで正規表現に置換すると、`E488: Trailing characters`が発生します。
-
[解決済み] 正規表現でのコロン記号の使用
-
[解決済み] 正規表現で複数の単語を任意の順序で並べる [重複]。
-
[解決済み] 与えられた文字列が与えられた部分文字列を含んでいるかどうかを見つけるための、scala の慣用的な方法は何ですか?
-
[解決済み] XPathのcontains関数で正規表現を使用する方法
-
[解決済み] bashスクリプトで「cd `echo $0 | sed 's/(.***)\/.*/**1/'` 」はどうするのですか?
-
[解決済み] ColdFusion を使用して XML 文字列から余分なホワイトスペースをすべて削除するにはどうすればよいですか?
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?
-
[解決済み] アドレスフィールド検証のための正規表現