PHP - Regex для более чем одной заглавной буквы? - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь написать PHP-скрипт, который находит все слова в списке или абзаце, которые имеют более одной заглавной буквы - или сочетание как минимум 1 буквы и 1 цифры. Я могу найти одну заглавную букву, но 2 заглавные буквы в слове - это проблема.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Надеюсь, я правильно понял ваш вопрос.Эти регулярные выражения соответствуют всем словам, в которых есть как минимум 2 заглавные буквы или как минимум 1 буква + 1 номер (например, HEllo, HellO, Hello1, hello2 и т. Д.).Он использует пробел в качестве разделителя, поэтому он может потерпеть неудачу с пунктуацией, включая запятые, точки и другие элементы в совпадениях.

$text = 'Text';
preg_match_all('#(?<= )([^ ]*\p{Lu}[^ ]*\p{Lu}[^ ]*(?= )|[^ ]*\p{L}[^ ]*\p{N}[^ ]*|[^ ]*\p{N}[^ ]*\p{L}[^ ]*)(?= )#u', $text, $matches);
print_r($matches[0]);

(Пояснение: он соответствует каждому слову, которому предшествует, а затем следует пробел (ноне включайте их в совпадение), в котором есть то, что не является пробелом, повторенным 0, 1 или более раз, заглавной буквой, снова непробельным повторением 0, 1 или более раз, снова заглавной буквой и снова чем-то, чтоне пробел, или то же самое, но вместо заглавных букв у вас есть буква и цифра, или цифра и буква)

Для того, чтобы использовать это вам нужно PHP > 5.1.0.Преимущество состоит в том, что он соответствует всем символам Юникода, которые считаются буквами или цифрами, а не только ASCII.Если вам это не нужно или у вас есть дополнительная версия PHP, вы можете использовать версию ASCII:

$text = 'Text';
preg_match_all('#(?<= )([^ ]*[A-Z][^ ]*[A-Z][^ ]*(?= )|[^ ]*[A-Za-z][^ ]*[0-9][^ ]*|[^ ]*[0-9][^ ]*[A-Za-z][^ ]*)(?= )#', $text, $matches);
print_r($matches[0]);
0 голосов
/ 09 февраля 2012

не проверено, но в общем правильном направлении:

[a-z]*[A-Z]+[a-z]*[A-Z]+[a-z]*\s

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

...