Perl жадное регулярное выражение - PullRequest
0 голосов
/ 02 ноября 2010

У меня есть следующая строка:

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

Я хочу получить все между ' ', но от первого до последнего вхождения.

Я пытался найти свою строку по /.*('.*').*/, но был взят только 'fdsfdsf', как включить жадный или что-то в этом роде?

Ответы [ 4 ]

3 голосов
/ 02 ноября 2010

* жадный (*? Не жадный вариант). Следующее регулярное выражение работает отлично: /'(.*)'/.

3 голосов
/ 02 ноября 2010

Я собираюсь выйти на конечность и предположить, что вы на самом деле хотите получить все между одинарными кавычками внутри каждого поля, разделенного запятыми.

#!/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
1 голос
/ 02 ноября 2010

Попробуйте

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

Это даст вам строки, заключенные в одинарные кавычки внутри каждого поля в строке.

Конечно, кавычки должны быть сбалансированы, и совпадение с регулярным выражением будет отбрасываться экранированными кавычками в вашей строке, поэтому, если они могут произойти, шаблон необходимо изменить.

Например,

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

сработает, если кавычки можно экранировать с помощью обратных проб.

0 голосов
/ 02 ноября 2010

Ниже, похоже, тоже работает.Пожалуйста, проверьте:

@res = $str =~ m/'([A-Z|a-z| ]*)'*/g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...