如何在perl正则表达式中组合多个Unicode属性?
发布时间:2020-12-15 21:55:28 所属栏目:大数据 来源:网络整理
导读:有这个脚本: use 5.014;use warnings;use utf8; binmode STDOUT,':utf8';my $str = "XYZ ΦΨΩ zyz φψω";my @greek = ($str =~ /p{Greek}/g);say "Greek: @greek";my @upper = ($str =~ /p{Upper}/g);say "Upper: @upper";#my @upper_greek = ($str =
有这个脚本:
use 5.014; use warnings; use utf8; binmode STDOUT,':utf8'; my $str = "XYZ ΦΨΩ zyz φψω"; my @greek = ($str =~ /p{Greek}/g); say "Greek: @greek"; my @upper = ($str =~ /p{Upper}/g); say "Upper: @upper"; #my @upper_greek = ($str =~ /p{Upper+Greek}/); #wrong. #say "Upper+Greek: @upper_greek"; 可以组合多个unicode属性吗?例如,如何只选择Upper和Greek,并得到想要的: Greek: Φ Ψ Ω φ ψ ω Upper: X Y Z Φ Ψ Ω Upper+Greek: Φ Ψ Ω #<-- how to get this? 解决方法
我们不能用
/(?:p{Greek}|p{Upper})/ # Greek OR Upper 要么 /[p{Greek}p{Upper}]/ # Greek OR Upper 在正则表达式中实现AND的一种方法是使用外观. /p{Greek}(?<=p{Upper})/ # Greek AND Upper 获得AND的另一种方法是否定OR. De Morgan’s laws告诉我们 NOT( Greek AND Upper ) ? NOT(Greek) OR NOT(Upper) 所以 Greek AND Upper ? NOT( NOT(Greek) OR NOT(Upper) ) 这给了我们 /[^P{Greek}P{Upper}]/ # Greek AND Upper 从5.18开始,您还可以使用以下实验性功能: no warnings qw( experimental::regex_sets ); /(?[ p{Greek} & p{Upper} ])/ # Greek AND Upper (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |