Regex pour correspondre aux hiéroglyphes égyptiens

Je veux connaître une expression rationnelle pour correspondre aux hiéroglyphes égyptiens. Je suis complètement désemparé et j’ai besoin de votre aide.

Je ne peux pas poster les lettres car le débordement de stack ne semble pas le reconnaître.

Alors, quelqu’un peut-il me faire connaître la plage Unicode pour ces caractères.

TLDNR: \p{Egyptian_Hieroglyphs}

Javascript

Egyptian_Hieroglyphs appartiennent au plan “astral” qui utilise plus de 16 bits pour encoder un personnage. Depuis ES5, Javascript ne prend pas en charge les plans astraux ( plus à ce sujet ), vous devez donc utiliser des paires de substitution. Le premier substitut est

 U+13000 = d80c dc00 

le dernier est

 U+1342E = d80d dc2e 

ça donne

 re = /(\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E])+/g t = document.getElementById("pyramid").innerHTML document.write("

Found

" + t.match(re))
 
some 𓀀 really 𓀁 old 𓐬 stuff 𓐭 𓐮

Unicode code les hiéroglyphes égyptiens compris entre U + 13000 – U + 1342F (au-delà du plan multilingue de base).

Dans ce cas, il y a 2 façons d’écrire la regex:

  1. En spécifiant une plage de caractères de U + 13000 – U + 1342F.

    Bien que spécifier une plage de caractères en regex pour les caractères en BMP soit aussi facile que [az] , cela dépend des langues sockets en charge, cela peut ne pas être aussi simple pour les personnages des plans astraux.

  2. En spécifiant le bloc Unicode pour les hiéroglyphes égyptiens

    Étant donné que nous associons un caractère quelconque dans un bloc de hiéroglyphes égyptiens , il s’agit de la méthode préférée pour écrire la regex où la prise en charge est disponible.

Java

(Actuellement, je n’ai aucune idée de la façon dont les autres implémentations de Java Class Libraries traitent des caractères du plan astral dans les classes Pattern ).

Implémentation Sun / Oracle

Je ne suis pas sûr qu’il soit logique de parler de correspondance des caractères dans les plans astraux de Java 1.4, car la prise en charge des caractères au-delà de BMP n’a été ajoutée que dans Java 5 en adaptant l’implémentation Ssortingng existante (qui utilise UCS-2 pour sa représentation Ssortingng interne) ) avec des méthodes prenant en compte les points de code.

Comme Java continue de permettre à des substituts isolés (celui qui ne peut pas former de paire avec d’autres substituts) d’être spécifiés dans Ssortingng, cela a créé un désordre, puisque les substituts ne sont pas de vrais caractères et que les substituts isolés ne sont pas valides dans UTF-16.

Pattern classe de Pattern subi une refonte majeure de Java 1.4.x à Java 5, car la classe a été réécrite pour prendre en charge la correspondance des caractères Unicode dans les plans astraux: la chaîne de modèle est convertie en tableau de sharepoint code avant son parsing. chaîne est traversée par des méthodes sensibles au sharepoint code dans la classe Ssortingng.

Vous pouvez en savoir plus sur la folie dans la regex Java dans cette réponse de tchist.

J’ai écrit une explication détaillée sur la manière d’associer une gamme de caractères impliquant des personnages du plan astral dans cette réponse . Je ne vais donc inclure que le code ici. Il comprend également quelques contre-exemples de tentatives incorrectes d’écriture de regex pour correspondre aux caractères du plan astral.

Java 5 (et supérieur)

 "[\uD80C\uDC00-\uD80D\uDC2F]" 

Java 7 (et supérieur)

 "[\\uD80C\\uDC00-\\uD80D\\uDC2F]" "[\\x{13000}-\\x{1342F}]" 

Comme nous faisons correspondre n’importe quel sharepoint code au bloc Unicode, il peut également être écrit comme suit:

 "\\p{InEgyptian_Hieroglyphs}" "\\p{InEgyptian Hieroglyphs}" "\\p{InEgyptianHieroglyphs}" "\\p{block=EgyptianHieroglyphs}" "\\p{blk=Egyptian Hieroglyphs}" 

La syntaxe Java pour le bloc Unicode pris en charge depuis la version 1.4, mais la prise en charge du bloc Egyptian Hieroglyphs n’a été ajoutée que dans Java 7.

PCRE (utilisé en PHP)

L’exemple PHP est déjà couvert dans la réponse de georg :

 '~\p{Egyptian_Hieroglyphs}~u' 

Notez que l’ u est obligatoire si vous souhaitez faire correspondre les points de code au lieu de faire correspondre les unités de code.

Je ne suis pas sûr qu’il y ait un meilleur message sur StackOverflow, mais j’ai écrit quelques explications sur l’effet du drapeau u (mode UTF) dans cette réponse .

Une chose à noter est que Egyptian_Hieroglyphs n’est disponible qu’à partir de PCRE 8.02 (ou une version antérieure à PCRE 7.90 ).

Comme alternative, vous pouvez spécifier une plage de caractères avec la syntaxe \x{h...hh} :

 '~[\x{13000}-\x{1342F}]~u' 

Notez le drapeau obligatoire.

La syntaxe \x{h...hh} est prise en charge à partir d’au moins PCRE 4.50 .

JavaScript (ECMAScript)

ES5

La méthode de la plage de caractères (qui est la seule façon de faire cela en JavaScript vanilla) est déjà abordée dans la réponse de georg . Le regex est modifié un peu pour couvrir tout le bloc, y compris le sharepoint code non atsortingbué réservé.

 /(?:\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F])/ 

La solution ci-dessus montre la technique pour correspondre à une gamme de caractères dans le plan astral, ainsi que les limites de JavaScript RegExp.

JavaScript souffre également du même problème de représentation de chaîne que Java. Bien que Java ait Pattern classe Pattern dans Java 5 pour lui permettre de fonctionner avec des points de code, JavaScript RegExp est toujours bloqué à l’époque d’UCS-2, nous obligeant à utiliser des unités de code au lieu de sharepoint code dans l’expression régulière.

ES6

Cela va bientôt changer. Si tout se passe bien, il est probable que la prise en charge de la correspondance avec les points de code sera ajoutée à ECMAScript 6, qui est disponible via le drapeau u pour éviter de casser les implémentations existantes dans les versions précédentes d’ECMAScript.

  • ES6 Draft – 21.2 Objets RegExp (expression régulière)
  • Expressions régulières compatibles avec Unicode dans ECMAScript 6

Consultez la section Support du deuxième lien ci-dessus pour obtenir la liste des navigateurs fournissant un support expérimental pour ES6 RegExp .

Avec l’introduction de la syntaxe \u{h...hh} dans ES6, la plage de caractères peut être réécrite d’une manière similaire à Java 7:

 /[\u{13000}-\u{1342F}]/u 

Ou vous pouvez également spécifier directement le caractère dans le littéral RegExp , bien que l’intention ne soit pas aussi claire que [az] :

 /[𓀀-𓐯]/u 

Notez le modificateur u dans les deux expressions rationnelles ci-dessus.

Vous êtes toujours coincé avec ES5? Ne vous inquiétez pas, vous pouvez transférer ES6 Unicode RegExp vers ES5 RegExp avec regxpu .