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。”。你是英国人吗?☺@克里斯特:不是(德语),但我是在披头士乐队、道格拉斯·亚当斯、奥斯卡·王尔德和巨蟒乐队的饮食中长大的。