首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用\p{script=Han}在Perl一行中发出匹配的中文字符

使用\p{script=Han}在Perl一行中发出匹配的中文字符
EN

Stack Overflow用户
提问于 2022-11-11 15:19:16
回答 1查看 37关注 0票数 1

在zsh中使用Perl一行程序来匹配汉字真的让我很困惑。我不能得到\p{script=Han}匹配汉字,但P{script=Han}匹配。

任务:--我需要改变这一点:

代码语言:javascript
复制
一  
<lb/> 二

对此:

代码语言:javascript
复制
<tag ref="一二">一
<lb/> 二</tag>

这两个汉字之间可能有不同数量的标签、换行符、空格、制表符、字母数字字符、数字等。我相信最有效率和最有力的方法是寻找一些不是汉字的东西。

我的尝试解决方案:

代码语言:javascript
复制
perl -0777 -pi -e 's/(一)(\P{script=Han}*?)(二)/<tag ref="$1$3">$2<\/tag>/g'

当应用于上述示例时,这将产生预期的效果。

问题:我遇到的问题是\P{script=Han} (或\p{^script=Han})也匹配汉字。

当我试图匹配\p{script=Han}时,正则表达式不匹配,尽管它是一个充满汉字的文件。当尝试匹配\P{script=Han}时,正则表达式匹配文件中的每个字符。

我也不知道原因。

这是一个问题,因为在这种情况下,输出不像预期的那样:

代码语言:javascript
复制
一
<lb/> 三二

变成了

代码语言:javascript
复制
<tag ref="一二">一
<lb/> 三二</tag>

我不希望这种情况完全匹配--仅仅是一和二仅由非汉字的字符分隔的情况。

有人能告诉我我做错了什么吗?或者建议一个解决办法?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-11 22:42:08

当我试图匹配\p{script=Han}时,正则表达式不匹配,尽管它是一个充满汉字的文件。

问题是,您的脚本和输入文件都是UTF-8编码的,但是您没有对perl这样说。如果您不告诉perl,它将假定它们是ASCII编码的。

要说您的脚本是UTF-8编码的,请使用utf8实用程序。要告诉perl您打开的所有文件都是UTF-8编码的,请使用命令行选项。因此,下面的oneliner应该解决您的问题:

代码语言:javascript
复制
perl -Mutf8 -CD -0777 -pi -e 's/(一)(\P{script=Han}*?)(二)/<tag ref="$1$3">$2<\/tag>/g' file
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74404610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档