REGEX - как сделать диакритически нечувствительным в preg_match? - PullRequest
0 голосов
/ 18 января 2019

Есть ли способ использовать preg_match (например, возможно, с помощью флага) для выполнения диакритически нечувствительных совпадений?

Например, скажем, я бы хотел, чтобы оно совпадало:

  • кафе
  • кафе

Я знаю, что могу сделать регулярное выражение, как это: caf[eé]. Это регулярное выражение будет работать до тех пор, пока я не сталкиваюсь с другими диакритическими вариациями e, такими как: ê è ë ē ĕ ě ẽ ė ẹ ę ẻ.

Конечно, я мог бы просто перечислить все эти диакритические вариации в моем регулярном выражении, например caf[eêéèëēĕěẽėẹęẻ]. И пока я ничего не пропущу, я буду в порядке. Мне просто нужно сделать это для всех букв в алфавите, что является утомительным и подверженным ошибкам решением.

Я не могу найти и заменить диакритические буквы в теме их недиакритическими аналогами. Мне нужно сохранить тему как есть.

Идеальное решение для меня - иметь регулярное выражение, чтобы быть нечувствительным к диакритическим знакам. В приведенном выше примере я хочу, чтобы мое регулярное выражение было просто: cafe. Это возможно?

1 Ответ

0 голосов
/ 18 января 2019

Если вы открыты для сопоставления букв на любом языке (который включает символы с диритрикой), тогда вы можете использовать \p{L} или \p{Letter}, как показано здесь: https://regex101.com/r/UBGQI6/3

По данным регулярные-выражения.инфо ,

\ p {L} или \ p {Letter}: любые буквы на любом языке.

  • \ p {Ll} или \ p {Lowercase_Letter}: строчная буква с заглавной буквы.
  • \ p {Lu} или \ p {Uppercase_Letter}: заглавная буква со строчным вариантом.
  • \ p {Lt} или \ p {Titlecase_Letter}: буква, которая появляется в начале слова, когда заглавной буквой является только первая буква слова.
  • \ p {L &} или \ p {Cased_Letter}: буква, которая существует в строчных и прописных вариантах (комбинация Ll, Lu и Lt).
  • \ p {Lm} или \ p {Modifier_Letter}: специальный символ, который используется как буква.
  • \ p {Lo} или \ p {Other_Letter}: буква или иероглиф, который не имеет строчных и прописных вариантов.

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

...