여기 재미있는 생각입니다.
/(?:(=")|>)http:\/\/www\.(.*?)\/(.*?)(?(1)"|<)/sg
루핑을 사용하여 다음 찾기를 사용하십시오. 매번 변수 $ 2 및 $ 3을 추출합니다. 이것은 조건부를 사용합니다.
또는 /(?|(?<==")http:\/\/www\.(.*?)\/(.*?)(?=")|(?<=>)http:\/\/www\.(.*?)\/(.*?)(?=<))/sg
을 모두 사용하십시오. 이것은 분기 재설정을 사용합니다. 배열은 쌍으로 점증합니다 ($ cnt ++ % 2).
결합하여 의미하는 바에 따라 다릅니다.
펄 테스트 케이스 :
use strict;
use warnings;
my $str = '
<tag asdf="http://www.some.com/directory"/>
<dadr>http://www.adif.com/dir</dadr>
';
while ($str =~ /(?:(=")|>)http:\/\/www\.(.*?)\/(.*?)(?(1)"|<)/sg)
{
print "'$2' '$3'\n";
}
print "--------------\n";
my @parts = $str =~ /(?|(?<==")http:\/\/www\.(.*?)\/(.*?)(?=")|(?<=>)http:\/\/www\.(.*?)\/(.*?)(?=<))/sg;
my $cnt = 0;
for (@parts)
{
print "'$_' ";
if ($cnt++ % 2) {
print "\n";
}
}
__END__
출력 :
'some.com' 'directory'
'adif.com' 'dir'
--------------
'some.com' 'directory'
'adif.com' 'dir'
출처
2011-04-14 16:09:56
sln