Regex, чтобы определить, начинается ли строка с более чем одной заглавной буквы - PullRequest
1 голос
/ 08 августа 2009

Я пытаюсь определить, имеет ли строка более 1 заглавной буквы в строке в начале строки. У меня есть следующее регулярное выражение, но оно не работает:

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

Я хочу вернуть true для:

  • ABC
  • ABc
  • ABC ABC
  • ABC Abc

Но неверно для:

  • Abc
  • AbC
  • Abc Abc
  • ABC ABC

У меня есть 1000 только потому, что я знаю, что значение будет не более 1000 символов, но меня не волнует ограничение длины.

Я работаю с PHP, если это имеет какое-либо значение.

Ответы [ 8 ]

7 голосов
/ 08 августа 2009

Разве второй не сделает это?

^[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}

3 голосов
/ 08 августа 2009

Я запускал ^[A-Z]{2,} через Regex Tester для поиска egrep, и ваши тесты работали.

2 голосов
/ 08 августа 2009
php > echo preg_match("/^[A-Z]{2}/", "ABc");
1
php > echo preg_match("/^[A-Z]{2}/", "Abc");
0

/^[A-Z]{2}/, кажется, работает для меня. Так как в любом случае вы выполняете сопоставление подстроки, нет необходимости делать {2,} или {2,1000}.

2 голосов
/ 08 августа 2009

Итак, вы хотите, чтобы он совпадал со всей строкой, если первые 2 буквы являются заглавными? Если это так, это должно сделать это ...

^[A-Z]{2,}.*$
2 голосов
/ 08 августа 2009

Попробуйте ^[A-Z][A-Z]

1 голос
/ 08 августа 2009

версия без регулярных выражений

$str="Abccc";
$ch = substr($str,0,2);
if ( $ch == strtoupper($ch) ){
    print "ok";
}else{
    print "not ok";
}
1 голос
/ 08 августа 2009

Так как ваше регулярное выражение отлично работает при поиске строки, начинающейся с 2 заглавных букв, я предполагаю, что у вас возник другой вопрос.

Может быть, у вас нечувствителен к регистру

Попробуйте

(?-i)^[A-Z]{2,}

Или, может быть, вы имели в виду "соответствовать всей линии"

(?-i)^[A-Z].*$
0 голосов
/ 06 февраля 2014

Одним словом, вот ответ в регулярном выражении.

^[A-Z]{2,} or ^[A-Z][A-Z]+ 

Как вам проще :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...