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

正则表达式 – Perl匹配同一行上的多个字符串(双引号和单引号内

发布时间:2020-12-14 05:50:47 所属栏目:百科 来源:网络整理
导读:我认为这应该很简单,在同一行上匹配双/单引号中的字符串 例如,跟随字符串全部在同一行 “你好”’世界”foo’“酒吧” 我有 print /(”.*?”)|(‘.*?’)/g; 但我得到了以下错误 在…的印刷中使用未初始化的价值 解决方法 以下将返回您提到的警告: use str
我认为这应该很简单,在同一行上匹配双/单引号中的字符串

例如,跟随字符串全部在同一行

“你好”’世界”foo’“酒吧”

我有
print /(”.*?”)|(‘.*?’)/g;

但我得到了以下错误

在…的印刷中使用未初始化的价值

解决方法

以下将返回您提到的警告:

use strict;
use warnings;

my $str = q{"hello" 'world' 'foo' "bar"};

print $str =~ /(".*?")|('.*?')/g;

这是因为您的正则表达式只匹配捕获组中的一个或另一个.另一个将不匹配,因此将返回undef.

以下将说明:

while ($str =~ /(".*?")|('.*?')/g) {
    print "one = " . (defined $1 ? $1 : 'undef') . "n";
    print "two = " . (defined $2 ? $2 : 'undef') . "n";
    print "n";
}

输出:

one = "hello"
two = undef

one = undef
two = 'world'

one = undef
two = 'foo'

one = "bar"
two = undef

要获得所需的行为,只需将捕获组放在整个表达式周围即可.

print $str =~ /(".*?"|'.*?')/g;

(编辑:李大同)

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

    推荐文章
      热点阅读