В Perl, как я могу использовать одну группу регулярных выражений для захвата более одного вхождения, соответствующего ей, в несколько элементов массива?
Например, для строки:
var1=100 var2=90 var5=hello var3="a, b, c" var7=test var3=hello
для обработки этого кода:
$string = "var1=100 var2=90 var5=hello var3=\"a, b, c\" var7=test var3=hello";
my @array = $string =~ <regular expression here>
for ( my $i = 0; $i < scalar( @array ); $i++ )
{
print $i.": ".$array[$i]."\n";
}
Я хотел бы видеть как вывод:
0: var1=100
1: var2=90
2: var5=hello
3: var3="a, b, c"
4: var7=test
5: var3=hello
Что я буду использовать в качестве регулярного выражения?
Общность между вещами, которые я хочу здесь сопоставить, - это шаблон строки присваивания, поэтому что-то вроде:
my @array = $string =~ m/(\w+=[\w\"\,\s]+)*/;
Если * указывает одно или несколько вхождений, соответствующих группе.
(я отклонил использование split(), поскольку некоторые совпадения содержат пробелы внутри себя (т.е. var3...) и поэтому не дают желаемых результатов.)
С приведенным выше выражением я получаю:
0: var1=100 var2
Возможно ли это в регулярном выражении? Или требуется дополнительный код?
Посмотрел уже на существующие ответы при поиске "perl regex multiple group", но не хватает подсказок:
- Работа с несколькими группами захвата в нескольких записях
- Несколько совпадений в группе регулярных выражений?
- Regex: повторяющиеся группы захвата
- Соответствие и группировка регулярных выражений
- Как сопоставить регулярное выражение с группировкой с неизвестным количеством групп
- awk извлечь несколько групп из каждой строки
- Совмещение нескольких групп регулярных выражений и их удаление
- Perl: удаление нескольких строк реферирования, где выполняется определенный критерий
- Соответствие регулярных выражений по нескольким группам в строке?
- PHP RegEx Группировка нескольких совпадений
- Как найти несколько вхождений с группами регулярных выражений?