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字符集被定义为属于某些脚本。这些字符集中的一个字符可以使用脚本名称进行匹配