[解決済み] Regexの複数マッチの部分文字列
質問
私は、Perlの正規表現が与えられたときに、ドロップダウンメニューと単純な入力フィールドのどちらを表示すべきかを判断するアプリケーションを持っています。したがって、私は"outer form"とサブストリングのための正規表現パターンをチェックする必要があります。このために、私はいくつかの解決策を思いつきました。
入力パターンが "^(100|500|1000)$" である場合、100、500、1000 の 3 つの項目を持つドロップダウンメニューになるはずです。有効なリストかどうかを判断するためにパターン全体を解析する正規表現と、1つの部分文字列を複数回マッチさせる方法を知らないので、実際の部分文字列のマッチングを行う正規表現が必要です。これが私の正規表現パターンです。
^\^\((?:((?:[^\|]|\\\|)+)(?:\||(?:\)\$$)))+
この正規表現は少し曖昧なので、少し簡略化します。
^\^\((?:([\w\d]+)(?:\||(?:\)\$$)))+
これは動作しますが、PCREとオンラインの正規表現ツールでテストしたところ、最後の部分文字列(この例では1000)だけが保存され、残りは捨てられます。実際の部分文字列、つまりドロップダウンメニューのフィールドを取得するためには、次のような方法があります。
(?:\^\()?((?:[^\|]|\\|)+)(?:\||(?:\)\$$))
再び簡略化。
(?:\^\()?([\w\d]+)(?:\||(?:\)\$$))
これは部分文字列にはマッチしますが、他の正規表現が行うドロップダウンメニューのパターン構文にはマッチしません(例えば、この正規表現は部分文字列 "100" を持つ "^(100|") にもマッチします)。 質問は、これらの正規表現を組み合わせて、1) パターン構文全体と 2) 実際のサブストリングにマッチする 1 つのパターンを作成する方法はありますか?
よろしくお願いします。
ジェレミー
追伸:当たり前のことですが、今日は正規表現について少し混乱しています。
サンプルデータです。
入力正規表現。^(100|500|1000)$
シンタックスOK!
一致した部分文字列 100, 500, 1000
=> ドロップダウンメニューを表示する
正規表現を入力します。^[0-9a-fA-F]+$ と入力します。
構文が違う!
=> 通常の入力フィールドを表示する
正規表現を入力します。^(foo|bar)$」と入力します。
シンタックスOK!
一致した部分文字列: "foo"、"bar"。
=> ドロップダウンメニューを表示する
正規表現を入力します。^(foo|bar)[0-9]+$」と入力します。
構文が違う!
=> 通常の入力フィールドを表示する
解決方法は?
2つのステップを踏むことで、必要なことを実現することができます。
この正規表現を使用して、フォーマットの検証を行うことができます。
\^\(\w+(?:\|\w+)*\)\$
正しい文字列を検証したら、次のような関数を使うことができます。
$str = "^(100|500|1000|2000|3000)$";
$arr = preg_split ("/\W+/" , $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($arr);
出力します。
Array
(
[0] => 100
[1] => 500
[2] => 1000
[3] => 2000
[4] => 3000
)
関連
-
[解決済み】REエラー:Mac OS Xでの不正なバイトシーケンス
-
[解決済み] 特定の文字が後にない'単語'を探す
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] 正規表現の全出現回数をマッチングさせる方法
-
[解決済み] Regex 2つの文字列間のすべての文字にマッチする
最新
-
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 オプションのワードマッチ
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] 半角スペース用正規表現
-
[解決済み] bashスクリプトで「cd `echo $0 | sed 's/(.***)\/.*/**1/'` 」はどうするのですか?
-
[解決済み] GNU sed の lookahead 正規表現がおかしいのですが?
-
[解決済み] Kibanaクエリの完全一致
-
[解決済み] 正規表現の末尾にある中括弧内のカンマ区切りの数字は何を意味するのですか?
-
[解決済み] 正規表現のメタ文字の違いについて
-
[解決済み] Regex for string contains?