2013-07-21 34 views
0

我有以下這些,如果沒有視頻標籤返回的URL這是視頻標籤內插入給出一個Perl的正則表達式。

正如你可以看到$2在下面的正則表達式的視頻標籤中添加。但我要檢查空白或空$ 2。如果$ 2爲空白,則顯示一些其他文字,如「無視頻」等。

因此,請幫助如何檢查返回的$2空白值並顯示其他一些文本。

$text =~ s#(^|\s|\>)((http|https)://www.hulu.com/watch/([a-z0-9\/\-]+))#$1\[video\]$2\[\/video\]#isg; 

回答

0

這是可能的途徑之一(但我強烈建議不要使用正則表達式這個):

my $good_text = "some text>http://www.hulu.com/watch/sdfsdf"; 
my $bad_text = "some text>http://www.hulu.com/watch/"; 

$good_text =~ 
s!(^|\s|\>)((?:http|https)://www.hulu.com/watch/([a-z0-9/-]*))!$1\[video\]@{[($3) ? $2 : "No video"]}\[\/video\]!isg; 

$bad_text =~ 
s!(^|\s|\>)((?:http|https)://www.hulu.com/watch/([a-z0-9/-]*))!$1\[video\]@{[($3) ? $2 : "No video"]}\[\/video\]!isg; 

print "Good '$good_text'\n"; 
print "Bad '$bad_text'\n"; 


$good_text = "some text>http://www.hulu.com/watch/sdfsdf"; 
$bad_text = "some text>http://www.hulu.com/watch/"; 

#below is the right way for such things -- using /e switch and function call  
$good_text =~ 
s!(^|\s|\>)((?:http|https)://www.hulu.com/watch/([a-z0-9/-]*))!check_result($1, $2, $3)!isge; 

$bad_text =~ 
s!(^|\s|\>)((?:http|https)://www.hulu.com/watch/([a-z0-9/-]*))!check_result($1, $2, $3)!isge; 

print "Good '$good_text'\n"; 
print "Bad '$bad_text'\n"; 

sub check_result { 

    my ($text, $url, $id) = @_; 

    if ($id) { 
     return $text . "[video]" . $url . $id . "[/video]"; 
    } 
    else { 

     return $text . "[video]No video[/video]"; 
    } 
} 
+0

感謝了很多!它解決了我的問題。再次感謝 – Laeeq