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 не работают, так как они соответствуют одной и той же строке, а не шаблону.

Это регулярное выражение соответствует вашим примерам

Другие вопросы по тегам