Я собираюсь извлечь имя и идентификатор некоторых Царапины данных с помощью этого сценария:регулярное выражение не соответствует в Perl
if ($string =~ m/(;r=\d*.*<)/) {
$mystring = $1;
$mystring =~ s/;//;
if ($mystring =~ m/(>.*<)/) {
$mystring = $1;
$mystring =~ s/>//;
$mystring =~ s/<//;
print "$mystring \n";
}
}
, в котором $string
содержит одну строку входного файла на одну итерацию. Вот несколько строк:
<pre>
<option data-url="/nav/extra/list?s=prix_asc&cat=436&npk=1&b=4294959199&r=4294959195" >ZAN 3713</option>
<option data-url="/nav/extra/list?s=prix_asc&cat=436&npk=1&b=4294959199&r=4294959194" >ZAN2310</option>
<option data-url="/nav/extra/list?s=prix_asc&cat=436&npk=1&b=4294959199&r=4294959193" >ZAN2410</option>
Что я ожидаю, как правило, является ;r=4294959193" >ZAN2410<
как результат; но проблема в том, что Perl не обнаруживает совпадений! Есть ли проблемы с моим регулярным выражением?
Если у вас есть полный HTML-документ, вы должны использовать парсер HTML вместо регулярных выражений. – simbabque
@simbabque Вы правы, но, как вопрос, я хочу знать, в чем проблема. –
Я думаю, что это может быть слишком жадным, но мне нужно будет увидеть, как вы читаете файл и что содержит '$ string'. Вы можете добавить ['use re 'debug''] (https://metacpan.org/pod/re#debug-mode) в начало своего кода, чтобы узнать, что делает механизм регулярных выражений. Это может дать вам подсказку. – simbabque