正規表現:大文字と小文字の区別を無視します


316

次の正規表現で大文字と小文字の区別を無視するにはどうすればよいですか?すべての正しい文字と一致する必要がありますが、小文字か大文字かは無視してください。

G[a-b].*

大文字と小文字の両方を正規表現に含めるか、正規表現マッチングを行う前に大文字に変換してください
Chetter Hummin

2
G [a-bA-B]。*は、この一般的なケースでは明らかです。大文字と小文字の区別はプラットフォームに依存しており、プラットフォームを指定していません。
Joachim Isaksson 2012年

16
Javaを使用している場合は、これをPatternクラスで指定できますPattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
james.garriss 2014

ここではより多くのJavaオプション: blogs.oracle.com/xuemingshen/entry/...
james.garriss

grepingの場合、-i修飾子を追加するだけであることに注意してください。例:grep -rni regular_expressionこの「regular_expression」「r」を再帰的に検索するには、大文字と小文字の「i」を区別せず、結果に「n」行を表示します。
ガブリエルステープルズ

回答:


444

あなたがしたいと仮定すると、全体の正規表現は、大文字小文字を無視して、あなたが探さなければならないiフラグ。ほぼすべての正規表現エンジンがこれをサポートしています。

/G[a-b].*/i

string.match("G[a-b].*", "i")

使用する言語/プラットフォーム/ツールのドキュメントを確認して、一致モードの指定方法を確認してください。

正規表現の一部のみを大文字と小文字を区別しないようにしたい場合(私の元の答えは推定されているとおり)、2つのオプションがあります。

  1. (?i)および(オプションで)(?-i)モード修飾子を使用します。

    (?i)G[a-b](?-i).*
  2. すべてのバリエーション(つまり、小文字と大文字)を正規表現に入れます。モード修飾子がサポートされていない場合に便利です。

    [gG][a-bA-B].*

最後に、ASCII以外のUnicode文字を扱っている場合は、正規表現エンジンで適切にサポートされているかどうかを確認してください。


鮮やかさ!対象:perl -pe 's / ^ utf-8 \?B \?。* $ // gi' Cancer.1631、文字列「UTF-8?B?」に一致/置換 ファイルCancer.1631。これは失敗します:大文字と小文字が一致しないため、perl -pe 's / ^ utf-8 \?B \?。* $ // g' Cancer.1631。
ビクトリアスチュアート

この投稿は、そのような具体的な例でなければ、より明確になります。「.txt」や「.TXT」などの別の単語の大文字と小文字を無視したい場合はどうでしょう。この答えを見ても、どうすればよいのかまだわかりません。
カイルブリデンスティン

何らかの理由で、投稿した正規表現がfind拡張正規表現でfind . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)機能しません。たとえば、フォルダーが表示されません。白find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)のモディファイアーなしの類似のReged は、正しいフォルダーを表示します。なぜだろう?
alpha_989

ここで[a-c]は、現在のフォルダ内の文字で始まるすべてのフォルダのみを検索しようとしています。さらに操作を行うために..
alpha_989

正直に言って、オプション2は一般的であり、すべての正規表現エンジンで機能するため、回答の主要部分にオプション2を入れます。
Puterdo Borato

154

実装に依存しますが、私は使用します

(?i)G[a-b].

バリエーション:

(?i) case-insensitive mode ON    
(?-i) case-insensitive mode OFF

最新の正規表現のフレーバーを使用すると、正規表現の一部にのみ修飾子を適用できます。正規表現の中央に修飾子(?im)を挿入すると、修飾子は正規表現の修飾子の右側の部分にのみ適用されます。これらのフレーバーでは、マイナス記号(?-i)を前に付けることでモードをオフにできます。

説明はページからです:https : //www.regular-expressions.info/modifiers.html


これはTortoiseHgの検索正規表現エンジンの修飾子形式です。
mwolfe02

Linuxシェルでこれをどのようにして実現できるか(たとえば、 "-i"スイッチを使用せずにegrepで)教えてください。
クリシュナグプタ

1
が何をするか、(?i)それを終了する方法を説明すること((?-i))は本当に役に立ちます。それが、この微妙な詳細を説明しているので、回答の投票数がほぼ1倍ではなく、1/1である理由です。
ガブリエルステープルズ


47

iフラグは、通常の場合非感受性のために使用されます。ここでは言語を指定しませんが、おそらく/G[ab].*/iまたはのようなものになります/(?i)G[ab].*/


15

完全を期すために、Unicodeを使用したC ++の正規表現のソリューションを追加したいと思いました。

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);

if (std::tr1::regex_match(szString, pattern))
{
...
}

1
誰かがこの投稿が反対票を投じられた理由を私に明確にできますか?承認されたソリューションは特定のコードを使用しており、完全を期すために、言語c ++の標準ライブラリ用のソリューションを追加したいと思いました。私の意見では、より一般的な質問に付加価値を付けました。
フランケンシュタイン

5

この同様の投稿(AWKではignorecase)で発見したように、古いバージョンのawk(バニラMac OS Xなど)では、を使用する必要がある場合があります'tolower($0) ~ /pattern/'

IGNORECASEまたは(?i)または/pattern/iいずれかのエラーを生成したり、ライン毎にtrueを返します。


2

C#

using System.Text.RegularExpressions;
...    
Regex.Match(
    input: "Check This String",
    pattern: "Regex Pattern",
    options: RegexOptions.IgnoreCase)

特に:オプション:RegexOptions.IgnoreCase


1

[gG] [aAbB]。*パターンが複雑すぎたり長すぎたりしない場合は、おそらく単純な解決策です。


なぜこの答えが与えられた質問に対して間違っているのか知りたいですか?
alpha_989 2017

「複雑すぎず、長すぎない」という答えがあります
reggaeguitar

これが実際に私のケースで機能した唯一のソリューションです。また、どこでも機能する最も一般的なソリューションのように見えます。他のすべての回答は、特定の正規表現の実装に非常に固有のようです。
Puterdo Borato

1

すでに受け入れられている回答への追加:

Grepの使用:

grepingの場合、-i修飾子を追加するだけであることに注意してください。例:grep -rni regular_expressionこの「regular_expression」「r」を再帰的に検索するには、大文字と小文字の「i」を区別せず、結果に「n」行を表示します。

また、正規表現を検証するための優れたツールは次のとおりです。https//regex101.com/

例:この画像の表現と説明を参照してください。

ここに画像の説明を入力してください

参照:


0

Javaでは、Regexコンストラクタは

Regex(String pattern, RegexOption option)

したがって、ケースを無視するには、

option = RegexOption.IGNORE_CASE

0

find / replaceを使用して、Visual StudioおよびVisual Studio Codeで正規表現を練習できます。

大文字と小文字を含む正規表現では、大文字と小文字の区別と正規表現の両方を選択する必要があります。その他[AZ]は機能しません。ここに画像の説明を入力してください

Visual Studio 2019コミュニティ


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.