2011-07-05 20 views
5

我想的正則表達式驗證長度爲1的串已經或者在字符AB(不區分大小寫)開始匹配僅A或B,不區分大小寫

因此,這應返回true

A 
    a 
    B 
    b 

任何文字將不匹配,所以下面將返回false:

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

而且我想要一百萬美元:)到目前爲止你做了什麼? –

+2

爲什麼你不能只比較你的字符串與這四種情況?正則表達式似乎是這樣的矯枉過正。 – whrrgarbl

+7

爲什麼在這個問題上有一個賞金?這並不有趣也沒有挑戰性...... @ User2867655 - 這是一個錯誤嗎? – Kobi

回答

10

您可以使用/^[AaBb]$/。這是我知道的最簡單的。

+0

感謝它的工作,我有^ [AaBn]但沒有$。 –

+1

@Richard FYI'$'表示「字符串結尾」。 – SteeveDroz

4

試試這個正則表達式:^[abAB]$

你也可以使用一個區分大小寫的選項(在Perl或JavaScript):/^[ab]$/i

+3

或者所有語言:'(?i)^ [ab] $'。 – Joey

+0

@Joey:是的!感謝那! –

2

您需要使用^(字符串的開始)和$(結束字符串)在您的模式:

/^[AB]$/i 

其中i改性劑是不區分大小寫的標誌,所以你只匹配接下來的字符:

  • 一個
  • 一個
  • b
+1

這假設他們正在使用JavaScript,Perl或PCRE。這種假設可能並非如此。 – Joey

+0

也在PHP中,它將工作 –

+0

PHP使用PCRE ... – Joey

3

既然要匹配字符的固定長度(在你的情況下,一個),所以你必須在你的正則表達式使用Anchoring使用^$或使用\A\Z。這些意味着字符串的開始和結束(爲了簡單起見)。你可以把你的正則表達式放在錨點之間來匹配整個字符串。例如:

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

現在來看看在串AB匹配的字符。有很多方法可以實現這一點。讓我們看看他們中的幾個。

使用Character Class/Set使用此功能,您可以在[]中放置多個字符,並只選取一個字符進行匹配。所以對於你的情況,正則表達式將如下所示。它表示A,a,Bb(表示任何情況)中的任何字符。

^[AaBb]$ 

使用Alternating/Pipe這可以幫助你在你的正則表達式,這意味着匹配多個正則表達式的一個使用OR條件。讓我們看看下面的正則表達式,在這裏它使用管道中的字符。

^(A|a|B|b)$ 

使用modifier您可以使用調節劑在你的正則表達式來兩個大寫或小寫匹配。這種情況下,你只能在你的正則表達式中使用AB來匹配。在這裏,我使用(?i)修飾符來忽略該情況。

(?i)^[AB]$ 

我想相信會有更多的其他方式來做到這一點。你可以發現,使用谷歌搜索,或可以等待來自這個網站的其他相思來回應!

+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兼容的任何東西都更好。

相關問題