我想的正则表达式验证长度为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