my $test = "<test1>INVOICE STATUS<";
Я пытался с регулярным выражением как:
if ( $test =~ m/(<.*.>)/g){ print "matched $1"; }
Полученный результат был "lt;test1>".
"lt;test1>".
Может ли кто-нибудь предложить правильную функцию, спасибо заранее.
Вы можете попробовать:
/>([^&]+)<\//g
Пример:
$_ = "<test1>INVOICE STATUS</test1><test2>NON-PO INVOICE</test2><o:p></o:p></b></p><p class=MsoPlainText><b><test3>please specify</test3><o:p></o:p></b></p><p class=MsoPlainText><b><test4>please specify</test>"; while(/>([^&]+)<\//g){ print "$1\n"; }
Вывод:
INVOICE STATUS NON-PO INVOICE please specify please specify
$1 содержит последнее совпадение первой группы захвата, которое разделено ( и ).
$1
(
)
Попробуйте: /<(.*.)>/ вместо.
/<(.*.)>/
/([-a-zA-Z]\s[a-zA-Z])/g
Первое слово соответствует букве или -, пробел, второе слово только буквы.
РЕДАКТИРОВАТЬ: Или />(.*?)</g
/>(.*?)</g
у вас есть скобки, обратные тем, которые вам нужны в исходном регулярном выражении.