我想的正則表達式驗證長度爲1的串已經或者在字符A
或B
(不區分大小寫)開始匹配僅A或B,不區分大小寫
因此,這應返回true
A
a
B
b
任何文字將不匹配,所以下面將返回false:
"America"
"Bi"
"a door"
我想的正則表達式驗證長度爲1的串已經或者在字符A
或B
(不區分大小寫)開始匹配僅A或B,不區分大小寫
因此,這應返回true
A
a
B
b
任何文字將不匹配,所以下面將返回false:
"America"
"Bi"
"a door"
試試這個正則表達式:^[abAB]$
你也可以使用一個區分大小寫的選項(在Perl或JavaScript):/^[ab]$/i
或者所有語言:'(?i)^ [ab] $'。 – Joey
@Joey:是的!感謝那! –
既然要匹配字符的固定長度(在你的情況下,一個),所以你必須在你的正則表達式使用Anchoring使用^
和$
或使用\A
和\Z
。這些意味着字符串的開始和結束(爲了簡單起見)。你可以把你的正則表達式放在錨點之間來匹配整個字符串。例如:
^...REGEX...$
\A...REGEX...\Z
現在來看看在串A
或B
匹配的字符。有很多方法可以實現這一點。讓我們看看他們中的幾個。
使用Character Class/Set:使用此功能,您可以在[]
中放置多個字符,並只選取一個字符進行匹配。所以對於你的情況,正則表達式將如下所示。它表示A
,a
,B
或b
(表示任何情況)中的任何字符。
^[AaBb]$
使用Alternating/Pipe:這可以幫助你在你的正則表達式,這意味着匹配多個正則表達式的一個使用OR
條件。讓我們看看下面的正則表達式,在這裏它使用管道中的字符。
^(A|a|B|b)$
使用modifier:您可以使用調節劑在你的正則表達式來兩個大寫或小寫匹配。這種情況下,你只能在你的正則表達式中使用A
和B
來匹配。在這裏,我使用(?i)
修飾符來忽略該情況。
(?i)^[AB]$
我想相信會有更多的其他方式來做到這一點。你可以發現,使用谷歌搜索,或可以等待來自這個網站的其他相思來回應!
您的交替管道選項需要括號'^(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兼容的任何東西都更好。
而且我想要一百萬美元:)到目前爲止你做了什麼? –
爲什麼你不能只比較你的字符串與這四種情況?正則表達式似乎是這樣的矯枉過正。 – whrrgarbl
爲什麼在這個問題上有一個賞金?這並不有趣也沒有挑戰性...... @ User2867655 - 這是一個錯誤嗎? – Kobi