2011-07-05 22 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兼容的任何东西都更好。

相关问题