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]
Run Code Online (Sandbox Code Playgroud)
我正在使用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 ...
Run Code Online (Sandbox Code Playgroud)
关于为什么这不起作用的任何想法?
根据 Sergey 的建议,我在调用 mb_ereg_match() 函数之前添加了以下几行:
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
Run Code Online (Sandbox Code Playgroud)
此添加消除了上面列出的两个警告。我只留下以下警告:
mbregex compile err: empty char-class in ...
Run Code Online (Sandbox Code Playgroud)
经过一些额外的调试后,我发现少数 CLDR XML 文件实际上包含空的正则表达式字符串。例如,kn.xml我们有以下行:
<exemplarCharacters type="auxiliary">[]</exemplarCharacters>
Run Code Online (Sandbox Code Playgroud)
我认为这些行是错误的,因为预期的行为是完全忽略该行(整个 CLDR 中大多都是这种情况)。
因此,我可以通过简单地抛出空的正则表达式字符串来消除最后一个错误。
希望这对其他人有帮助!
| 归档时间: |
|
| 查看次数: |
987 次 |
| 最近记录: |