正则表达式,用于确定字符串是否以多个大写字母开头

时间:2009-08-07 23:14:25

标签: regex

我正在尝试确定一个字符串在字符串开头的行中是否有超过1个大写字母。我有以下正则表达式,但它不起作用:

`^[A-Z]{2,1000}`

我希望它返回true:

  • ABC
  • ABC
  • ABC ABC
  • ABc Abc

但错误的是:

  • ABC
  • ABC
  • Abc Abc
  • Abc ABc

我有1000只因为我知道该值不会超过1000个字符,但我不关心限制长度。

我正在使用PHP,如果它有任何区别。

8 个答案:

答案 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]+ 

哪个看起来更容易:)