正则表达式中的希伯来语特殊字符

Nir*_*ana 2 php regex expression hebrew

这是我的代码:

preg_replace('/[^{Hebrew}a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $q);
Run Code Online (Sandbox Code Playgroud)

它应该只接受 az、AZ、0-9、任意数量的单个空格和希伯来字符。

我尝试了很多变体,但就是无法让它工作。

提前致谢!

nha*_*tdh 5

在 PCRE 中,\p{xx}and\P{xx}可以采用Unicode 类别名称或Unicode 脚本名称。该列表可以在PHP 文档PCRE 手册页中找到。

对于希伯来语脚本,您需要使用\p{Hebrew}.

我还删除了, ,\的转义符,因为它们已经失去了字符类中的特殊含义。标志( ) 没有用,因为正则表达式中没有点元字符。.()[]sDOTALL

preg_replace('/[^\p{Hebrew}a-zA-Z0-9_ %\[\].()&-]/', '', $q);
Run Code Online (Sandbox Code Playgroud)

附录

来自Unicode 常见问题解答。它解释了块和脚本之间的区别。供您参考,PCRE 仅支持匹配 Unicode 脚本和 Unicode 类别(字符属性)。

问:如果 Unicode 块不是代码页,那么它们是什么?

答:Unicode 标准中的块被称为代码点范围。它们用于帮助将标准组织成相关类型字符的分组,以方便参考。图表程序使用它们来定义为书中或在线发布的代码图表一起打印的字符范围。

问:Unicode 块是否定义了字符属性?

答:不。字符属性与编码字符本身相关,而不是与它们编码的块相关。

问:这也适用于角色剧本吗?

答:是的。例如,泰语块包含具有泰语脚本属性的泰语字符,但它也包含泰铢货币符号的字符,当然,该字符在泰语文本中使用,但被定义为具有通用脚本属性。要查找任何字符的脚本属性值,您需要依赖Unicode 字符数据库数据文件Scripts.txt,而不是单独的块值。

问:那么块值与脚本值不一样吗?

答:正确。在某些情况下,例如拉丁语,编码的字符分布在多达十几个不同的 Unicode 块中。这很不幸,但这只是标准历史的结果。在其他情况下,单个块可能包含多个脚本的字符。例如,希腊和科普特文字块主要包含希腊文字的字符,但也包含一些科普特文字的历史字符。