Сплит с регекспом (need help)
Sep. 26th, 2010 05:20 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Хочу очень простой вещи: разделить строку на части, при этом разделители многосимвольные, похожи, но отличаются на пару символов друг от друга... Хочется нечто вроде
my $s="111 =aa= 222 =bb= 333 =cc= 444";
print join "\n", split(/=(aa|bb|cc)=/, $s);
Но: split когда в шаблоне встречаются скобки то что попадает в зону группировки добавляет в результирующий список, а нам это не надо. если скобки убрать то тогда знак равенства становиться частью первой и последний альтернативы. Это нам тоже не надо.
Теоретически можно написать split /=aa=|=bb=|=cc=/, $s
и тогда все будет. Но это только в примере выглядит коротко... В жизни так писать не хотелось бы.
Научить сплит не включать зоны группировки в результат кажется невозможно... Можно ли как-то без круглых скобок намекнуть регекспу что знак равенства уже не часть альтернативы, а следующий за альтернативой символ?
my $s="111 =aa= 222 =bb= 333 =cc= 444";
print join "\n", split(/=(aa|bb|cc)=/, $s);
Но: split когда в шаблоне встречаются скобки то что попадает в зону группировки добавляет в результирующий список, а нам это не надо. если скобки убрать то тогда знак равенства становиться частью первой и последний альтернативы. Это нам тоже не надо.
Теоретически можно написать split /=aa=|=bb=|=cc=/, $s
и тогда все будет. Но это только в примере выглядит коротко... В жизни так писать не хотелось бы.
Научить сплит не включать зоны группировки в результат кажется невозможно... Можно ли как-то без круглых скобок намекнуть регекспу что знак равенства уже не часть альтернативы, а следующий за альтернативой символ?