加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读