首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何处理Perl regex中的每个ASCII字符(包括regex特殊字符)?

如何处理Perl regex中的每个ASCII字符(包括regex特殊字符)?
EN

Stack Overflow用户
提问于 2009-04-15 22:39:22
回答 3查看 1.2K关注 0票数 4

我用Perl编写了以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
if (index ($retval, $_[2]) != -1) {
    @fs = split ($_[2], $_[1]);

$_[2]是分隔符变量,$_[1]是分隔符可能存在的字符串。(在其他地方使用$_[0])您可能已经猜到,这段代码是通过这些变量名在子例程中的。

不管怎样,关于我的问题,当我的分隔符是像'a'':'这样无害的东西时,代码就会像它应该的那样工作。但是,当它是由Perl regex解析的东西时,比如'\'字符,它就不能正常工作了。这是有意义的,因为在split函数中,Perl将看到类似以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
split (/\/, $_[1]); 

这对它来说毫无意义,因为它想要的是:

代码语言:javascript
代码运行次数:0
运行
复制
split (/\//, $_[1]);

因此,考虑到所有这些,我无法回答的问题是:“我如何才能使我放入$_[2]中的任何分隔符或所有ASCII码字符都被视为它应该是的字符,而不是被解释为其他字符?”

提前谢谢你,

罗伯特

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-15 22:47:03

您可以使用quotemeta正确地转义$_[2],这样它就可以在正则表达式中正常工作,而不会被损坏。这应该可以做到:

代码语言:javascript
代码运行次数:0
运行
复制
my $quoted = quotemeta $_[2];
@fs = split( $quoted, $_[1] );

或者,可以在正则表达式中使用\Q对其进行转义。请参阅perlre中的“转义序列”。

票数 13
EN

Stack Overflow用户

发布于 2009-04-15 22:46:46

代码语言:javascript
代码运行次数:0
运行
复制
split /\Q$_[2]/, $_[1]
票数 6
EN

Stack Overflow用户

发布于 2009-04-16 09:50:47

顺便说一句,我怀疑$_[1]$_[2]变量引用了自动传入的sub的@_数组。

这是很有帮助的--可以省去你在这里的一些解释,并让你的代码更容易理解--以及在sub的开头使用如下内容的常见做法:

代码语言:javascript
代码运行次数:0
运行
复制
sub mysub {
  my ($param1, $string, $delim) = @_;
  # ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/754028

复制
相关文章

相似问题

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