Как извлечь строковое значение с помощью функции регулярного выражения Perl? - PullRequest
0 голосов
/ 27 декабря 2011
my $test = "<test1>INVOICE STATUS&lt";

Я пытался с регулярным выражением как:

if ( $test =~  m/(<.*.>)/g){
print "matched $1";
}

Полученный результат был "lt;test1>".

Может ли кто-нибудь предложить правильную функцию, спасибо заранее.

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

Вы можете попробовать:

/>([^&]+)<\//g

Пример:

$_ = "&lt;test1&gt;INVOICE STATUS&lt;/test1&gt;&lt;test2&gt;NON-PO INVOICE&lt;/test2&gt;<o:p></o:p></b></p><p class=MsoPlainText><b>&lt;test3&gt;please specify&lt;/test3&gt;<o:p></o:p></b></p><p class=MsoPlainText><b>&lt;test4&gt;please specify&lt;/test&gt;";

while(/&gt;([^&]+)&lt;\//g){
        print "$1\n";
}

Вывод:

INVOICE STATUS
NON-PO INVOICE
please specify
please specify
0 голосов
/ 27 декабря 2011

$1 содержит последнее совпадение первой группы захвата, которое разделено ( и ).

Попробуйте: /&lt;(.*.)&gt;/ вместо.

0 голосов
/ 27 декабря 2011

/([-a-zA-Z]\s[a-zA-Z])/g

Первое слово соответствует букве или -, пробел, второе слово только буквы.

РЕДАКТИРОВАТЬ: Или /&gt;(.*?)&lt;/g

у вас есть скобки, обратные тем, которые вам нужны в исходном регулярном выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...