Regex Perl贪婪正则表达式

Regex Perl贪婪正则表达式,regex,perl,Regex,Perl,我有以下字符串: $foo=“'fdsfdsf'、'fsdfdsfdsfdsfds fdsf sdf sfs'、'fsdfsdfsd f'fdfsdfdsfdsfsfs” 我想得到'之间的所有内容,但要从第一次到最后一次 我试图通过/.*('.'')./搜索我的字符串,但只使用了'fdsfdsf',如何启用贪婪或类似功能?试试看 @result = $subject =~ m/'([^']*)'/g; 这将为您提供字符串中每个字段中用单引号括起来的字符串 当然,引号需要平衡,并且正则表达式匹配

我有以下字符串:

$foo=“'fdsfdsf'、'fsdfdsfdsfdsfds fdsf sdf sfs'、'fsdfsdfsd f'fdfsdfdsfdsfsfs”

我想得到
'
之间的所有内容,但要从第一次到最后一次

我试图通过
/.*('.'')./
搜索我的字符串,但只使用了
'fdsfdsf'
,如何启用贪婪或类似功能?

试试看

@result = $subject =~ m/'([^']*)'/g;
这将为您提供字符串中每个字段中用单引号括起来的字符串

当然,引号需要平衡,并且正则表达式匹配将被字符串中的转义引号抛出,因此如果可能发生这种情况,则需要修改模式

比如说,

m/'((?:\\.|[^'])*)'/

如果可以用反斜杠转义引号,则可以使用。

*
是贪婪的(*?是非贪婪的版本)。下面的正则表达式可以正常工作:
/'(.*)/

我要冒险一试,假设您想要在每个逗号分隔字段中的单引号之间实际获取所有内容

#!/usr/bin/perl

use strict; use warnings;

my $foo = "'fdsfdsf', 'fsdfdsfdsfdsfds fdsf sdfd f sfs', 'fsdfsdfsd f' fdfsdfdsfdsfsf";

my @fields = map /'([^']*)'/, split ', ', $foo;

use YAML;
print Dump \@fields;
输出:

--- - fdsfdsf - fsdfdsfdsfdsfds fdsf sdfd f sfs - fsdfsdfsd f --- -fdsfdsf -fsdfdsfdsfdsfds fdsf SDF sfs
-下面的fsd f似乎也起到了作用。请检查:

@res = $str =~ m/'([A-Z|a-z| ]*)'*/g;

我不这么认为-它将捕获从第一个
到最后一个
。@Tim,这不是我们要求的吗?@Tim:这就是OP要求的。你说得对。“我猜我误解了他(认为第一次和最后一次出现时,他指的是引号内的每个字符串,至少对我来说是有意义的)。你到底想做什么?说需要修改转义引号的模式就是我所说的戏剧性的轻描淡写,@Tim。”。你是英国人吗?☺@克里斯特:不是(德语),但我是在披头士乐队、道格拉斯·亚当斯、奥斯卡·王尔德和巨蟒乐队的饮食中长大的。