Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式中的希伯来特殊字符_Php_Regex_Expression_Hebrew - Fatal编程技术网

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

Php 正则表达式中的希伯来特殊字符,php,regex,expression,hebrew,Php,Regex,Expression,Hebrew,这是我的代码: preg_replace('/[^{Hebrew}a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $q); 它应该只接受a-z,a-z,0-9,任意数量的空格和希伯来文字符 我试了很多次,但都没能成功 提前谢谢 在PCRE中,\p{xx}和\p{xx}可以采用名称或名称。该列表可在或中找到 对于希伯来语脚本,您需要使用\p{Hebrew} 我还删除了,(,)的转义\,因为它们在字符类[]中已经失去了特殊意义。s标志(DOTALL)是无用的,因为正则

这是我的代码:

preg_replace('/[^{Hebrew}a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $q);
它应该只接受a-z,a-z,0-9,任意数量的空格和希伯来文字符

我试了很多次,但都没能成功


提前谢谢

在PCRE中,
\p{xx}
\p{xx}
可以采用名称或名称。该列表可在或中找到

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

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

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

附录 从。它解释了块和脚本之间的区别。请参考,PCRE仅支持匹配Unicode脚本和Unicode类别(字符属性)

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

答:Unicode标准中的块是命名的代码点范围。它们用于帮助将标准组织为相关类型字符的分组,以便于参考。它们被一个图表程序用来定义一起打印出来的字符范围,这些字符可以在书中看到,也可以在网上发布

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

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

Q:这甚至适用于角色脚本吗?

A:是的。例如,Thai块包含具有Thai script属性的泰国字符,但它也包含泰铢货币符号的字符,当然,泰铢货币符号在泰国文本中使用,但定义为具有Common script属性。要查找任何字符的脚本属性值,您需要依赖数据文件,而不仅仅是块值

Q:那么块值与脚本值不同?

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


在PCRE中,
\p{xx}
\p{xx}
可以接受名称或名称。该列表可在或中找到

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

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

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

附录 从。它解释了块和脚本之间的区别。请参考,PCRE仅支持匹配Unicode脚本和Unicode类别(字符属性)

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

答:Unicode标准中的块是命名的代码点范围。它们用于帮助将标准组织为相关类型字符的分组,以便于参考。它们被一个图表程序用来定义一起打印出来的字符范围,这些字符可以在书中看到,也可以在网上发布

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

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

Q:这甚至适用于角色脚本吗?

A:是的。例如,Thai块包含具有Thai script属性的泰国字符,但它也包含泰铢货币符号的字符,当然,泰铢货币符号在泰国文本中使用,但定义为具有Common script属性。要查找任何字符的脚本属性值,您需要依赖数据文件,而不仅仅是块值

Q:那么块值与脚本值不同?

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


您应该将文件更改为utf 8编码,例如:记事本++转到编码->编码为utf-8。它可以工作:
preg_replace('/[^\p{Hebrew}a-zA-Z0-9%[.()&-]/u','',$q)
我还添加了“u”作为修饰语。

您应该将文件更改为utf 8编码,例如:记事本++转到编码->编码为utf-8。而且它可以工作:
preg_replace('/[^\p{Hebrew}a-zA-Z0-9%[.()&-]/u',“,$q)
我还添加了“u”作为修饰语。

你说“你不能让它工作”是什么意思?你有没有尝试过像这样的regexp测试工具?将这个regexp分解成小块并测试每一个。您忘记了
\p
,所以请使用
\p{Hebrew}
阅读更多有关Unicode字符属性的信息,以了解原因:@olleOlle:严格来说,这不是Unicode属性。这是Unicode脚本。谢谢你清理它。PHP手册这样讨论它们之间的关系:“Unicode字符集被定义为属于某些脚本。这些字符集中的一个字符可以使用脚本名称进行匹配