gpt4 book ai didi

php - PHP 中的正则表达式 : Matching to the UTS18 standard

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:23 27 4
gpt4 key购买 nike

Unicode 通用语言环境数据存储库 (CLDR) 包含有关语言和字符之间关系的大量信息。例如,您可以通过查看 misc.exemplarCharacters 来确定特定语言中使用了哪些字符。图表。这些图表的原始数据存储为 XML 文件,示例字符根据 Unicode 正则表达式标准存储为正则表达式 UTS18 .

以下是 UTS18 正则表达式的一些示例:

1. [a à b c ç d e é è f g h i í ï j k l ŀ m n o ó ò p q r s t u ú ü v w x y z]
2. [অ আ ই ঈ উ ঊ ঋ এ ঐ ও ঔ ং \u0981 ঃ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড {ড\u09BC}ড় ঢ {ঢ\u09BC}ঢ় ণ ত থ দ ধ ন প ফ ব ভ ম য {য\u09BC} ৰ ল ৱ শ ষ স হ া ি ী \u09C1 \u09C2 \u09C3 ে ৈ ো ৌ \u09CD]
3. [a á b ɓ c d ɗ e é ɛ {ɛ\u0301} f g i í j k l m n {ny} ŋ o ó ɔ {ɔ\u0301} p r s t u ú ū w y]

我正在使用 PHP 和 SimpleXML 来解析 XML 数据并隔离这些正则表达式字符串。现在,我想将单个多字节字符与这些正则表达式相匹配。我目前正在使用 mb_ereg_match函数,它会产生以下一个或多个警告(取决于正则表达式):

mbregex compile err: premature end of char-class in ...
mbregex compile err: empty range in char class in ...
mbregex compile err: empty char-class in ...

关于为什么这不起作用的任何想法?

最佳答案

按照 Sergey 的建议,我在调用 mb_ereg_match() 函数之前添加了以下几行:

mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

此添加消除了上面列出的两个警告。我只剩下以下警告:

mbregex compile err: empty char-class in ...

经过一些额外的调试,我发现少数 CLDR XML 文件实际上包含空的正则表达式字符串。例如,在 kn.xml 中,我们有以下行:

<exemplarCharacters type="auxiliary">[]</exemplarCharacters>

我认为这些行是错误的,因为预期的行为是简单地完全省略该行(整个 CLDR 中的大多数情况都是如此)。

因此,我能够通过简单地丢弃空的正则表达式字符串来消除最后一个错误。

希望这对其他人有帮助!

关于php - PHP 中的正则表达式 : Matching to the UTS18 standard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11094122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com