[解決済み] 正規表現の一部だけを大文字小文字を区別しないようにすることはできますか?
質問
正規表現全体を大文字小文字を区別しないようにする例をたくさん見てきました。 私が疑問に思っているのは、式の一部だけを大文字小文字を区別しないようにすることです。
たとえば、次のような文字列があるとします。
fooFOOfOoFoOBARBARbarbarbAr
大文字小文字に関係なく "foo" のすべての出現にマッチさせたいが、大文字の "BAR" のみにマッチさせたい場合はどうすればよいですか?
理想的なソリューションは、正規表現のフレーバーに関係なく動作するものですが、言語固有のものも聞きたいと思っています (ありがとうございます。 エスポ )
編集
Espoさんが提供してくれたリンクはとても参考になりました。 式の中で修飾語をオン・オフすることについて、良い例が載っています。
私の考えた例では、次のようなことができます。
(?i)foo*(?-i)|BAR
で、fooの部分だけ大文字小文字を区別しないマッチになります。
これは、Javascript、Python、およびいくつかの他のもの(Espoが言及したように)を除くほとんどの正規表現実装で動作するように見えました。
私が疑問に思っていた大きなもの (Perl、PHP、.NET) はすべて、インラインモードの変更をサポートしています。
どのように解決するのですか?
Perlでは、(?i:)パターン修飾子を使うことで、正規表現の一部を大文字小文字を区別しないようにすることができます。
最近のregexのフレーバーでは、正規表現の一部だけにモディファイアを適用することができます。正規表現の途中に修飾子 (?ism) を挿入すると、修飾子の右側の部分だけに修飾子が適用されます。モードをオフにするには、その前にマイナス記号を付けます。マイナス記号の後のモードはすべてオフになります。例: (?i-sm) は大文字小文字を区別せず、単一行モードと複数行モードの両方をオフにします。
すべての正規表現がこれをサポートしているわけではありません。JavaScript と Python はすべてのモード修飾子を正規表現全体に適用します。モード修飾子が正規表現全体に適用される場合、オプションをオフにすることは無意味であるため、(?-ismx)構文はサポートされていません。デフォルトではすべてのオプションがオフになっています。
使用している正規表現がモード修飾子をどのように扱うかをすぐにテストすることができます。正規表現 (?i)te(?-i)st は test と TEst にマッチしますが、teST や TEST にはマッチしません。
関連
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] 正規表現におけるスラッシュのエスケープ
-
[解決済み] /bb|[^b]{2}/ どのように機能するのですか?[クローズド]
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] 正規表現で任意の文字数を表す記号?
-
[解決済み] 正規表現におけるワードバウンダリとは何ですか?
-
[解決済み] 正規表現 - Gmailアドレスの検証
-
[解決済み] TCL/EXPECTで$expect_outを使用して変数を割り当てるにはどうすればよいですか?
-
[解決済み] Java RegExは大文字と小文字を区別しないのですか?