J'écris un analyseur pour les données RDF au format Turtle dans Swift. La grammaire tortue définit le crépitement PN_CHARS_BASE
commeCaractères Unicode (UTF-32) Chaîne de codage dans NSRegularExpression
[163s] PN_CHARS_BASE ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
(voir le W3C Turtle recommendation).
Le dernier groupe du modèle [#x10000-#xEFFFF]
est en dehors de la plage de codage de chaîne UTF-16. UTF-32 est nécessaire ici.
Ce motif est utilisé pour faire correspondre, par exemple, le premier caractère du préfixe dans une chaîne préfixée telle que foaf
dans foaf:name
, les chiffres ne sont pas autorisés ici.
Je voudrais utiliser NSRegularExpression
pour analyser des fichiers de tortue. Donc, pour correspondre au modèle PN_CHARS_BASE
, j'ai le code suivant pour les tests:
let PN_CHARS_BASE = "[A-Z]|[a-z]|[\\u00C0-\\u00D6]|[\\u00D8-\\u00F6]|[\\u00F8-\\u02FF]|[\\u0370-\\u037D]|[\\u037F-\\u1FFF]|[\\u200C-\\u200D]|[\\u2070-\\u218F]|[\\u2C00-\\u2FEF]|[\\u3001-\\uD7FF]|[\\uF900-\\uFDCF]|[\\uFDF0-\\uFFFD]|[\\u10000-\\uEFFFF]"
do {
let teststr = "9"
let regex = try NSRegularExpression(pattern: PN_CHARS_BASE, options: [])
let matches = regex.matchesInString(teststr, options: [], range: NSMakeRange(0, teststr.characters.count)) as Array<NSTextCheckingResult>
} catch {
}
Quand je lance ce à travers le débogueur, l'expression régulière retourne un résultat sur la chaîne de test 9
. Mais les nombres ne sont pas autorisés pour ce modèle (l'expression rationnelle ne devrait donc renvoyer aucune correspondance). J'ai enlevé des parties du motif regex pour déterminer quelle partie de l'expression régulière correspondait au nombre 9
et a découvert que la dernière partie de l'expression régulière [\u10000-\uEFFFF]
correspond à 9
. C'est la seule partie du modèle qui est en UTF-32 et non en UTF-16 et inclut des caractères tels que les hiéroglyphes égyptiens. Savez-vous si le NSRegularExpression
est capable de supporter les caractères UTF-32? Ou de toute autre solution pour supporter l'appariement UTF-32?