如何在汉字和英文字符之间插入一个space?
How to insert a space between Chinese character and English character?
我有一个汉字和英文字符相邻的语句:
我Love Perl 6哈哈
我想在汉字和英文字符之间插入一个space:
我 Love Perl 6 哈哈
我搜索\u4e00-\u9fa5
代表汉字:
'哈' ~~ /<[\u4e00..\u9fa5]>/
但这导致:
Potential difficulties:
Repeated character (0) unexpectedly found in character class
at line 2
------> '哈' ~~ /<[\u4e00..\⏏u9fa5]>/
那么如何匹配汉字呢?
主要问题是 \u
不是有效的转义符。
> "\u4e00"
===SORRY!=== Error while compiling:
Unrecognized backslash sequence: '\u'
------> "\⏏u4e00"
\x
虽然。
> "\x4e00"
一
无论如何,您尝试使用的字符 class 并未涵盖所有汉字。
> '㒠' ~~ /<[\x4e00..\x9fa5]>/
Nil
您可能想要在脚本上进行匹配。
> '㒠' ~~ /<:Han>/
「㒠」
这样做的好处是,您不必在每次向 Unicode 添加一组新字符时都不断更改字符 class。
无论如何,您可以执行以下任一操作
# store in [=14=] and
say S/(<:Han>)(<:Latin>)/[=14=] / given '我Love Perl 6哈哈'
say S{(<:Han>)(<:Latin>)} = "[=14=] " given '我Love Perl 6哈哈'
# same with subst
say '我Love Perl 6哈哈'.subst: /(<:Han>)(<:Latin>)/, {"[=14=] "}
# 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>)/[=15=] /;
$v ~~ s{(<:Han>)(<:Latin>)} = "[=15=] ";
$v ~~ s/<:Han> <()> <:Latin>/ /;
$v .= subst: /(<:Han>)(<:Latin>)/, {"[=15=] "};
$v .= subst: /<:Han> <()> <:Latin>/,' ';
请注意,<(
会导致它前面的所有内容都被忽略,)>
会忽略它后面的所有内容。 (可单独使用)。
您可能希望对后面的字符使用反向匹配。
S/<:Han> <( )> [ <!:Han> & <!space> ]/ /
(匹配一个既不是汉又不是space的字符。)
我有一个汉字和英文字符相邻的语句:
我Love Perl 6哈哈
我想在汉字和英文字符之间插入一个space:
我 Love Perl 6 哈哈
我搜索\u4e00-\u9fa5
代表汉字:
'哈' ~~ /<[\u4e00..\u9fa5]>/
但这导致:
Potential difficulties:
Repeated character (0) unexpectedly found in character class
at line 2
------> '哈' ~~ /<[\u4e00..\⏏u9fa5]>/
那么如何匹配汉字呢?
主要问题是 \u
不是有效的转义符。
> "\u4e00"
===SORRY!=== Error while compiling:
Unrecognized backslash sequence: '\u'
------> "\⏏u4e00"
\x
虽然。
> "\x4e00"
一
无论如何,您尝试使用的字符 class 并未涵盖所有汉字。
> '㒠' ~~ /<[\x4e00..\x9fa5]>/
Nil
您可能想要在脚本上进行匹配。
> '㒠' ~~ /<:Han>/
「㒠」
这样做的好处是,您不必在每次向 Unicode 添加一组新字符时都不断更改字符 class。
无论如何,您可以执行以下任一操作
# store in [=14=] and
say S/(<:Han>)(<:Latin>)/[=14=] / given '我Love Perl 6哈哈'
say S{(<:Han>)(<:Latin>)} = "[=14=] " given '我Love Perl 6哈哈'
# same with subst
say '我Love Perl 6哈哈'.subst: /(<:Han>)(<:Latin>)/, {"[=14=] "}
# 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>)/[=15=] /;
$v ~~ s{(<:Han>)(<:Latin>)} = "[=15=] ";
$v ~~ s/<:Han> <()> <:Latin>/ /;
$v .= subst: /(<:Han>)(<:Latin>)/, {"[=15=] "};
$v .= subst: /<:Han> <()> <:Latin>/,' ';
请注意,<(
会导致它前面的所有内容都被忽略,)>
会忽略它后面的所有内容。 (可单独使用)。
您可能希望对后面的字符使用反向匹配。
S/<:Han> <( )> [ <!:Han> & <!space> ]/ /
(匹配一个既不是汉又不是space的字符。)