Perl贪婪的正则表达式

时间:2010-11-02 12:08:22

标签: regex perl

我有以下字符串:

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

我希望获得' '之间的所有内容,但是从第一次到最后一次。

我试图通过/.*('.*').*/搜索我的字符串,但只拍摄'fdsfdsf',如何打开贪婪或类似的东西?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

我打算走出困境,并假设你想要在每个以逗号分隔的字段中中的单引号之间实现所有内容。

#!/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

答案 2 :(得分:1)

尝试

@result = $subject =~ m/'([^']*)'/g;

这将为您提供字符串中每个字段中单引号中的字符串。

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

例如,

m/'((?:\\.|[^'])*)'/
如果可以使用反斜杠转义引号,

将起作用。

答案 3 :(得分:0)

下面似乎也有效。请检查:

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