Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 递归地提取给定字符串中引号之间的字符串_String_Perl_Extract_Quotes - Fatal编程技术网

String 递归地提取给定字符串中引号之间的字符串

String 递归地提取给定字符串中引号之间的字符串,string,perl,extract,quotes,String,Perl,Extract,Quotes,给定一个在引号中包含子字符串的字符串,提取所有此类子字符串 我已经写了下面的代码,但有些东西告诉我它很难看(尽管它似乎确实起到了作用) perl quotes.pl 地狱;世界 这是;也 因此,它确实如预期的那样工作。您可以在标量上下文中直接使用/gregex标志: while ($str =~ /"([^"]*)"/g) { print "$1\n"; } 。。。或列表上下文: for my $match ($str =~ /&qu

给定一个在引号中包含子字符串的字符串,提取所有此类子字符串

我已经写了下面的代码,但有些东西告诉我它很难看(尽管它似乎确实起到了作用)

perl quotes.pl
地狱;世界
这是;也

因此,它确实如预期的那样工作。

您可以在标量上下文中直接使用
/g
regex标志:

while ($str =~ /"([^"]*)"/g) {
    print "$1\n";
}
。。。或列表上下文:

for my $match ($str =~ /"([^"]*)"/g) {
    print "$match\n";
}
我还将
*?
更改为
[^”]*
,因为最好是具体说明要匹配的内容

/g
记录在:

/g
修饰符指定全局模式匹配——也就是说,在字符串中尽可能多地匹配。它的行为取决于上下文。在列表上下文中,它返回与正则表达式中任何捕获括号匹配的子字符串的列表。如果没有括号,它返回列表在所有匹配的字符串中,好像整个模式周围都有括号

在标量上下文中,每次执行
m//g
都会找到下一个匹配项,如果匹配,则返回true,如果没有进一步的匹配,则返回false。
可以使用
pos()读取或设置上一个匹配项后的位置
函数;请参阅。失败的匹配通常会将搜索位置重置为字符串的开头,但您可以通过添加
/c
修饰符(例如,
m//gc
)来避免这种情况。修改目标字符串也会重置搜索位置


(Emphasis mine.)

您可以在标量上下文中直接使用
/g
regex标志:

while ($str =~ /"([^"]*)"/g) {
    print "$1\n";
}
…或列表上下文:

for my $match ($str =~ /"([^"]*)"/g) {
    print "$match\n";
}
我还将
*?
更改为
[^”]*
,因为最好是具体说明要匹配的内容

/g
记录在:

/g
修饰符指定全局模式匹配——也就是说,在字符串中尽可能多地匹配。它的行为取决于上下文在列表上下文中,它返回由正则表达式中的任何捕获括号匹配的子字符串列表。如果没有括号,它将返回所有匹配字符串的列表,就像整个模式周围都有括号一样

在标量上下文中,每次执行
m//g
都会找到下一个匹配项,如果匹配,则返回true,如果没有进一步的匹配,则返回false。
可以使用
pos()
函数读取或设置上一个匹配项后的位置;看见失败的匹配通常会将搜索位置重置为字符串的开头,但可以通过添加
/c
修饰符(例如,
m//gc
)来避免这种情况。修改目标字符串也会重置搜索位置


(我的重点。)

子字符串是否可以有转义引号?例如,
'printf(“hello\'peter\”,…)
子字符串是否有转义引号?例如,
'printf(“你好”“彼得”“,…)”