С Руководство по Perl regex :
Это соответствует Unicode расширенный кластер графем .
\X
соответствует вполне
хорошо, что нормальное (не Unicode-программист) использование будет рассматривать
один символ В качестве примера рассмотрим G с каким-то
диакритический знак, такой как стрелка. Там нет такого единственного символа в
Unicode, но можно составить с помощью G, за которым следует Unicode
«КОМБИНИРОВАНИЕ ВВЕРХ СТРЕЛКАМИ НИЖЕ», и будет отображаться
Unicode-осведомленное программное обеспечение, как если бы оно было одним символом.
Мнемоника: расширенный символ Unicode.
И из Справочные страницы PCRE (2012):
PCRE реализует более простую версию \ X, чем Perl, которая была изменена, чтобы сделать \ X совпадающим с тем, что Unicode называет «расширенным кластером графем».
Это сложнее, чем расширенная последовательность Unicode, которая
что соответствует PCRE.
[...]
\ X расширенная последовательность Unicode
[...]
Экранирование \ X соответствует любому количеству символов Юникода, которые образуют расширенную последовательность Юникода. \ X эквивалентно
(?>\PM\pM*)
То есть он соответствует символу без свойства "mark",
за которым следует ноль или более символов со свойством mark, и
рассматривает последовательность как атомную группу (см. ниже). Персонажи с
свойство "mark" - это, как правило, акценты, которые влияют на
предыдущий персонаж. Ни у одного из них нет кодовых точек меньше 256, поэтому в
8-битный режим без UTF-8 \ X соответствует любому одному символу.
Обратите внимание, что последние версии Perl изменили \ X, чтобы соответствовать тому, что
Unicode вызывает «расширенный кластер графем», который имеет более
сложное определение.
Более поздняя версия Справочных страниц PCRE (2015):
Расширенные кластеры графем
Экран \X
соответствует любому количеству символов Юникода, которые образуют
«расширенный кластер графем», и рассматривает последовательность как атомарный
группа (см. ниже). До версии 8.31 включительно, соответствие PCRE
более раннее, более простое определение, которое было эквивалентно
(?>\PM\pM*)
То есть он соответствует символу без свойства "mark",
за которым следует ноль или более символов со свойством mark.
Символы со свойством mark обычно не являются пробелами
акценты, влияющие на предыдущий символ.
Это простое определение было расширено в Юникоде, чтобы включить больше
сложные виды сложного характера, давая каждому персонажу
нарушая графические свойства, и создавая правила, которые используют эти
свойства для определения границ расширенной графемы
кластеры. В выпусках PCRE более поздних, чем 8.31, \X
соответствует одному из
эти кластеры.
\X
всегда соответствует хотя бы одному символу. Затем он решает, стоит ли
добавить дополнительные символы в соответствии со следующими правилами для
окончание кластера:
Конец в конце строки темы.
Не заканчивается между CR и LF; в противном случае завершается после любого управляющего символа.
Не нарушайте последовательности слогов хангыль (корейский сценарий). Знаки хангыль бывают пяти типов: L, V, T, LV и LVT. Л
за символом может следовать символ L, V, LV или LVT; LV или
Символ V может сопровождаться символом V или T; LVT или T
за символом может следовать только символ T.
Не заканчивайте перед расширением символов или пробелами. Символы со свойством mark всегда имеют расширение
свойство разрушения графемы.
Не заканчиваться после символов препинания.
В противном случае завершите кластер.