我正在尝试确定一个字符串在字符串开头的行中是否有超过1个大写字母。我有以下正则表达式,但它不起作用:
`^[A-Z]{2,1000}`
我希望它返回true:
但错误的是:
我有1000只因为我知道该值不会超过1000个字符,但我不关心限制长度。
我正在使用PHP,如果它有任何区别。
答案 0 :(得分:7)
不会离开第二个人吗?
^[A-Z]{2,}
基本上说“字符串以2个或更多大写字母开头”
以下是您提供的应匹配的字符串的一些测试:
>>> 'ABC'.match(/^[A-Z]{2,}/);
["ABC"]
>>> 'ABc'.match(/^[A-Z]{2,}/);
["AB"]
>>> 'ABC ABC'.match(/^[A-Z]{2,}/);
["ABC"]
>>> 'ABc Abc'.match(/^[A-Z]{2,}/);
["AB"]
然后是那些不应该匹配的:
>>> 'Abc'.match(/^[A-Z]{2,}/);
null
>>> 'AbC'.match(/^[A-Z]{2,}/);
null
>>> 'Abc Abc'.match(/^[A-Z]{2,}/);
null
>>> 'Abc ABc'.match(/^[A-Z]{2,}/);
null
如果您只想匹配前两个,则可以{2}
答案 1 :(得分:3)
我通过Regex Tester运行^[A-Z]{2,}
进行egrep搜索,您的测试用例也有效。
答案 2 :(得分:2)
尝试^[A-Z][A-Z]
答案 3 :(得分:2)
如果前2个字母是大写字母,那么你是否希望它匹配整行?如果是这样,应该这样做......
^[A-Z]{2,}.*$
答案 4 :(得分:2)
php > echo preg_match("/^[A-Z]{2}/", "ABc");
1
php > echo preg_match("/^[A-Z]{2}/", "Abc");
0
/^[A-Z]{2}/
似乎对我有用。由于您正在进行子字符串匹配,因此无需执行{2,}
或{2,1000}
。
答案 5 :(得分:1)
由于你的正则表达式能够很好地找到以2个上限开头的行,我假设你有另一个问题。
也许你对
的案例不感兴趣尝试
(?-i)^[A-Z]{2,}
或许你的意思是“匹配整条线”
(?-i)^[A-Z].*$
答案 6 :(得分:1)
非正则表达式版本
$str="Abccc";
$ch = substr($str,0,2);
if ( $ch == strtoupper($ch) ){
print "ok";
}else{
print "not ok";
}
答案 7 :(得分:0)
总之,这里是正则表达式中的答案。
^[A-Z]{2,} or ^[A-Z][A-Z]+
哪个看起来更容易:)