私はこれが本当マッチのみAまたはBの大文字小文字を区別しない
A
a
B
b
を返す必要があります開始
で文字A
またはB
(大文字小文字を区別しない)のいずれかを持っている長さ1の文字列を検証する正規表現をしたいです
次はfalseを返しますので、任意の単語は、一致しません:
"America"
"Bi"
"a door"
私はこれが本当マッチのみAまたはBの大文字小文字を区別しない
A
a
B
b
を返す必要があります開始
で文字A
またはB
(大文字小文字を区別しない)のいずれかを持っている長さ1の文字列を検証する正規表現をしたいです
次はfalseを返しますので、任意の単語は、一致しません:
"America"
"Bi"
"a door"
あなたは/^[AaBb]$/
を使用することができます。それは私が知っている最もシンプルなものです。また、あなたは(PerlやJavaScriptで)大文字小文字を区別しないオプションを使用することができます^[abAB]$
:
ありがとう、私は^ [AaBn]がありますが、$はありません。 –
@リチャードFYI '$'は "文字列の最後"を意味します。 – SteeveDroz
あなたは(あなたのケース1には)文字の固定長を一致させたいので、あなたが正規表現にAnchoringを使用する必要がありますので、 ^
および$
を使用するか、または\A
および\Z
を使用します。これらは、文字列の開始と終了を意味します(簡略化のため)。正規表現をアンカーの間に置くことで、文字列全体にマッチさせることができます。たとえば:
^...REGEX...$
\A...REGEX...\Z
は今、文字列内の文字A
またはB
のマッチングに来ます。これを達成する方法はたくさんあります。それらのいくつかを見てみましょう。
使用方法Character Class/Set:これを使用して、[]
の中に複数の文字を配置し、一致する文字を1つだけ選択できます。あなたの場合、正規表現は以下のようになります。 A
、a
、B
、またはb
(いずれの場合も意味する)の任意の文字を意味します。これは、あなたが複数の一致1つの正規表現を意味し、あなたの正規表現でOR
条件を使用することができます:Alternating/Pipeを使用して
^[AaBb]$
。下の正規表現を見てみましょう。ここではパイプ内の文字を使用しています。
modifierを使用して^(A|a|B|b)$
:あなたは上部または下部の両方のケースに合わせて正規表現で修飾子を使用することができます。その場合は一致する正規表現にA
とB
しか使用できません。ここでは、ケースを無視するために(?i)
修飾子を使用しています。
(?i)^[AB]$
私はそれを行うための他の多くの方法があると思います。あなたはGoogle Searchを使ってそれを見つけることができます、またはこのサイトから他のSagaciousが応答するのを待つことができます!
あなたの交代パイプオプションには角括弧 '^(A | a | B | b)$' – sgauria
@sgauriaが必要です。それを逃した。 :-p –
正規表現を使用しないでください。ではありません。正規の文法です。文法は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互換のものよりもはるかによく適合します。
私は100万ドルを望んでいます:)あなたはこれまで何をしていますか? –
なぜあなたはあなたの文字列をそれらの4つのケースと単に比較できませんか?正規表現は、このために過度のようだ。 – whrrgarbl
なぜこの質問に恩恵はありますか?それは面白くも挑戦でもありません... @ User2867655 - これは間違いですか? – Kobi