2011-07-05 3 views
5

私はこれが本当マッチのみAまたはBの大文字小文字を区別しない

A 
    a 
    B 
    b 
を返す必要があります開始

で文字AまたはB(大文字小文字を区別しない)のいずれかを持っている長さ1の文字列を検証する正規表現をしたいです

次はfalseを返しますので、任意の単語は、一致しません:

"America" 
"Bi" 
"a door" 
+1

私は100万ドルを望んでいます:)あなたはこれまで何をしていますか? –

+2

なぜあなたはあなたの文字列をそれらの4つのケースと単に比較できませんか?正規表現は、このために過度のようだ。 – whrrgarbl

+7

なぜこの質問に恩恵はありますか?それは面白くも挑戦でもありません... @ User2867655 - これは間違いですか? – Kobi

答えて

10

あなたは/^[AaBb]$/を使用することができます。それは私が知っている最もシンプルなものです。また、あなたは(PerlやJavaScriptで)大文字小文字を区別しないオプションを使用することができます^[abAB]$

+0

ありがとう、私は^ [AaBn]がありますが、$はありません。 –

+1

@リチャードFYI '$'は "文字列の最後"を意味します。 – SteeveDroz

4

すると、この正規表現を試してみてください/^[ab]$/i

+3

またはすべての言語で: '(?i)^ [ab] $' – Joey

+0

@Joey:はい!それに感謝します! –

2

あなたは^(文字列の先頭)と$(最後のを使用する必要がありますあなたのパターンの文字列)::i修飾子は大文字小文字を区別しないフラグなので、あなただけの次の文字に一致する

/^[AB]$/i 
  • B
  • B
+1

これは、JavaScript、PerlまたはPCREを使用していることを前提としています。その前提は真実ではないかもしれない。 – Joey

+0

PHPでもそれはうまくいくでしょう –

+0

PHPはPCREを使用しています... – Joey

3

あなたは(あなたのケース1には)文字の固定長を一致させたいので、あなたが正規表現にAnchoringを使用する必要がありますので、 ^および$を使用するか、または\Aおよび\Zを使用します。これらは、文字列の開始と終了を意味します(簡略化のため)。正規表現をアンカーの間に置くことで、文字列全体にマッチさせることができます。たとえば:

^...REGEX...$ 
\A...REGEX...\Z 

は今、文字列内の文字AまたはBのマッチングに来ます。これを達成する方法はたくさんあります。それらのいくつかを見てみましょう。

使用方法Character Class/Setこれを使用して、[]の中に複数の文字を配置し、一致する文字を1つだけ選択できます。あなたの場合、正規表現は以下のようになります。 AaB、またはb(いずれの場合も意味する)の任意の文字を意味します。これは、あなたが複数の一致1つの正規表現を意味し、あなたの正規表現でOR条件を使用することができます:Alternating/Pipeを使用して

^[AaBb]$ 

。下の正規表現を見てみましょう。ここではパイプ内の文字を使用しています。

modifierを使用して
^(A|a|B|b)$ 

あなたは上部または下部の両方のケースに合わせて正規表現で修飾子を使用することができます。その場合は一致する正規表現にABしか使用できません。ここでは、ケースを無視するために(?i)修飾子を使用しています。

(?i)^[AB]$ 

私はそれを行うための他の多くの方法があると思います。あなたはGoogle Searchを使ってそれを見つけることができます、またはこのサイトから他のSagaciousが応答するのを待つことができます!

+2

あなたの交代パイプオプションには角括弧 '^(A | a | B | b)$' – sgauria

+0

@sgauriaが必要です。それを逃した。 :-p –

0

正規表現を使用しないでください。ではありません。正規の文法です。文法はstar freeです。

厳密に言えば、標準的なパーサーや、スターフリー文法のものはありません。したがって、あなたの言語で利用可能な基本的な文字列チェックを使用して独自のものを作成するだけです。例えば

:これは、ほぼ確実に、より効率的である

bool test_for_ab_i(const std::string& input) 
{ 
    if(input.length() > 1) return false; 
    const char& test = input[0]; 

    if(test == 'a' || test == 'b' || test == 'A' || test == 'B') return true; 
    return true; 
} 

さえよりも、最もよくDFAやNFA最適化されました。ただし、実際の正規表現も解析する必要がある場合は、RE2を使用することを検討してください。 PerlやPCRE互換のものよりもはるかによく適合します。

関連する問題