PCRE Регулярное выражение. Разрешить латинские, ивритские и греческие символы
Условия:
- Строка может содержать латинский символ
- Строка может содержать иврит
- Строка может содержать 0, 1, 2 символа греческого символа
Примеры:
- A ===> хорошо
- б ===> хорошо
- β ===> хорошо
- ג ===> хорошо
- хорошо ===> хорошо
- aaaββ ג ===> хорошо
- aaaββ גגג ===> хорошо
- aβa ג βa גג ===> хорошо
- aβaaβ ג β גג ===> плохо
В те моменты у меня есть это, но не контролировать греческий предел
/^[\ Р {Latin}\ р {Hebrew}\ р {Греческий}]+$/ у
2 ответа
Решение
Вы можете просто регулярное выражение с lookaround теперь позволяет 3 греческих символа, а все остальные:
/^(?!(?:\P{Greek}*\p{Greek}){3})[\p{Latin}\p{Hebrew}\p{Greek}]+$/u
Смотрите демо-версию регулярного выражения. Вы можете легко настроить шаблон с такими же условиями.
подробности
^
- начало строки(?!(?:\P{Greek}*\p{Greek}){3})
- сразу с начала строки, попробуйте сопоставить 3 повторения нуля или более не греческих букв (\P{Greek}*
в демоверсии он заменен на[^\n\p{Greek}]*
чтобы правильно сопоставить строки в многострочном вводе), а затем греческую букву, и если совпадение найдено, все совпадение с регулярным выражением не выполняется (совпадение не возвращается)[\p{Latin}\p{Hebrew}\p{Greek}]+
- 1 или более греческих, латинских или еврейских букв$
- конец строки (или, лучше, использовать\z
соответствовать самому концу строки).
Я думаю, что вам нужно это (нечитаемый) способ
^([\p{Latin}\p{Hebrew}]*)(\p{Greek}?)([\p{Latin}\p{Hebrew}]*)(\p{Greek}?)([\p{Latin}\p{Hebrew}]*)$
повторяющиеся группы с \1\2\1\2\1 не работают, так как они соответствуют одной и той же строке, а не шаблону.
Это регулярное выражение соответствует вашим примерам