我有一项声明,中文和英文字是相邻的:
我Love Perl 6哈哈我想在汉字和英文字之间插入一个空格:
我 Love Perl 6 哈哈我搜索\u4e00-\u9fa5表示汉字:
'哈' ~~ /<[\u4e00..\u9fa5]>/但结果是:
Potential difficulties:
Repeated character (0) unexpectedly found in character class
at line 2
------> '哈' ~~ /<[\u4e00..\⏏u9fa5]>/那么,如何匹配一个汉字呢?
发布于 2018-07-11 13:56:06
主要问题是\u不是有效的转义。
> "\u4e00"
===SORRY!=== Error while compiling:
Unrecognized backslash sequence: '\u'
------> "\⏏u4e00"不过,\x是。
> "\x4e00"
一无论如何,您试图使用的字符类并不包括所有的汉字。
> '㒠' ~~ /<[\x4e00..\x9fa5]>/
Nil您可能想要的是在脚本上匹配。
> '㒠' ~~ /<:Han>/
「㒠」这样做的好处是,每次在Unicode中添加一组新字符时,不必一直更改您的字符类。
无论如何,您可以执行以下任何一项操作
# store in $0 and $1
say S/(<:Han>)(<:Latin>)/$0 $1/ given '我Love Perl 6哈哈'
say S{(<:Han>)(<:Latin>)} = "$0 $1" given '我Love Perl 6哈哈'
# same with subst
say '我Love Perl 6哈哈'.subst: /(<:Han>)(<:Latin>)/, {"$0 $1"}
# only match between the two
say S/<:Han> <( )> <:Latin>/ / given '我Love Perl 6哈哈'
say S{<:Han> <( )> <:Latin>} = ' ' given '我Love Perl 6哈哈'若要更改变量中的值,请使用s///或.=subst
my $v = '我Love Perl 6哈哈';
$v ~~ s/(<:Han>)(<:Latin>)/$0 $1/;
$v ~~ s{(<:Han>)(<:Latin>)} = "$0 $1";
$v ~~ s/<:Han> <()> <:Latin>/ /;
$v .= subst: /(<:Han>)(<:Latin>)/, {"$0 $1"};
$v .= subst: /<:Han> <()> <:Latin>/,' ';请注意,<(会导致它之前的所有内容被忽略,而)>对它之后的所有内容都会这样做。(可以单独使用)。
您可能希望对下面的字符使用倒排匹配。
S/<:Han> <( )> [ <!:Han> & <!space> ]/ /(匹配一个同时不是汉而不是空格的字符。)
https://stackoverflow.com/questions/51286606
复制相似问题