gpt4 book ai didi

regex - 查找被引号包围的单词 perl

转载 作者:行者123 更新时间:2023-12-02 08:35:15 25 4
gpt4 key购买 nike

我正在逐行阅读另一个 perl 文件,需要找到用单引号或双引号括起来的任何单词或一组单词。这是我正在阅读的代码示例:

#!/usr/bin/env perl
use strict;
use warnings;

my $string = 'Hello World!';
print "$string\n";

基本上,我需要找到并打印出“Hello World!”和“$string\n”。

我已经很好地读取了我的文件并将其内容存储在一个数组中。从那里我遍历每一行并使用正则表达式在引号中找到所需的单词集:

for(@contents) {
if(/\"|\'[^\"|\']*\"|\'/) {
print $_."\n";
}
}

这给了我以下输出:

my $string = 'Hello World!';
print "$string\n";

我尝试按空格拆分内容,然后尝试找到匹配项,但这给了我这个:

'Hello
World!'
"$string\n";

我已经尝试了这里建议的许多其他解决方案,但都无济于事。我也尝试过 Text::ParseText 并使用 parse_line,但这给了我完全错误的输出。

有什么可以帮助我的想法吗?

最佳答案

只需要在正则表达式中添加一些捕获括号,而不是打印整行

use strict;
use warnings;

while (<DATA>) {
if(/(["'][^"']*["'])/) {
print "$1\n";
}
}

__DATA__
#!/usr/bin/env perl
use strict;
use warnings;

my $string = 'Hello World!';
print "$string\n";

请注意,您的正则表达式中有很多缺陷。例如 '\'' 不会正确匹配。 "He said 'boo'" 也不会。为了更接近你必须做一些平衡的括号检查,但不会有任何完美的解决方案。

对于更接近的解决方案,您可以使用以下方法:

if(/('(?:(?>[^'\\]+)|\\.)*'|"(?:(?>[^"\\]+)|\\.)*")/) {

这会处理我上面的异常以及像 print "how about ' this\"and ' more\n"; 这样的字符串,但是仍然有边缘情况,比如使用 qq{}q{} 。更不用说跨越多行的字符串了。

换句话说,如果你的目标是完美的,这个项目可能超出了大多数人的技能范围,但希望以上内容会有所帮助。

关于regex - 查找被引号包围的单词 perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com