0
Я хочу, чтобы фильтровать некоторые подстроки из строки:Матчи без согласования чередований
.
.
th>Di, -12 ;0907<th
th>Mi, -44 ;1007<th
th>Do, -66 ;1107<th
.
.
Мой Perl скрипт:
.
.
my (@d,$h,$s);
@d=$h=~/(th>(Di|Mi|Do), -\d\d ;\d\d\d\d<th)/igs;
foreach $s (@d)
{print "$s\n";};
Output is:
th>Di, -12 ;0907<th
Di
th>Mi, -44 ;1007<th
Mi
th>Do, -66 ;1107<th
Do
Моя проблема, мне нужен этот вывод:
th>Di, -12 ;0907<th
th>Mi, -44 ;1007<th
th>Do, -66 ;1107<th
Как фильтровать совпадения без чередования в регулярном выражении?
Просьба пояснить. Ваш «Выход» выглядит равным «Мне нужен этот вывод» ... если его буквально о «Ди, Ми, До» в отдельной строке исключить это из группы совпадений с помощью оператора '?:': '/ (th> (: Di | Mi | Do), - \ d \ d; \ d \ d \ d \ d
Ваш код неверен. Переменная '$ h' не определена при использовании в регулярном выражении. Я знаю, что он содержит, но может быть запутан для всех, кто копирует и вставляет ваш код, пытаясь помочь. – Birei
Благодарим вас за помощь. В следующий раз я буду более точно. – Schnulli
ответ
Ну, проще всего было бы просто превратить захват группы в не-захвате один с оператором
?:
регулярных выражений:На самом деле,
?:
часто используются с|
: ограничить объем чередования, в вы должны использовать круглые скобки, но вам не нужно также использовать их основной эффект (захват).источник
2013-09-06 21:13:13 raina77ow
Это решило мою проблему. Спасибо за вашу быструю помощь! – Schnulli
Если вы знаете, что данные имеют одинаковое количество цифр в следующих строках, вы могли бы сделать ..
Если длина вашего номера различаются, то я хотел бы сделать.
Вместо того, чтобы использовать пространство в своем регулярном выражении, используйте
\s
:Причина в том, если данные имеют более одного места, то регулярное выражение не будет соответствовать следующее:
источник
2013-09-06 22:08:31 hwnd
Спасибо - также за ваш дополнительный намек. – Schnulli
Смежные вопросы