Как создать регулярное выражение Perl, чтобы удалить все символы перед первым «<»? - PullRequest
1 голос
/ 06 октября 2009

В настоящее время у меня есть это: tr/[.]+(?=<)//d, который должен удалить все символы (представленные [.]+) вплоть до первого "<", потому что я использую положительный прогноз. Но по какой-то причине он удаляет все "." и "<" из строки.

Кстати, я не обрабатываю HTML или XML с помощью регулярных выражений.

Ответы [ 5 ]

6 голосов
/ 06 октября 2009

Значение символов изменяется при использовании в [] в качестве класса символов. [.] не имеет никакого значения, действительно, отличается от всего. Итак . интерпретируется буквально в этом контексте.

Я думаю, что это должно работать просто отлично:

$text =~ s/^.*?</</s; 
6 голосов
/ 06 октября 2009

Вы не хотите tr.

#!/usr/bin/perl

use strict;
use warnings;

while ( <DATA> ) {
    last unless /\S/;
    s/^.+?</</;
    print;
}

__DATA__
a < b < c
a < b < c
3 голосов
/ 06 октября 2009

'.' в классе символов не является метасимволом. Также вы хотите s///, а не tr, который заменяет отдельные символы. так что s/^.+(?=<)// должно работать, хотя лично я бы написал s{^.*<}{<}, чтобы избежать упущения.

3 голосов
/ 06 октября 2009
^[^<]+

. (точка) в классе символов - это буквальная точка, а не подстановочный знак.

1 голос
/ 06 октября 2009

Редактировать как было уточнено:

if ($line =~ /^.+?<(.+)/) {
  push @matched, $1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...