2013-07-26 195 views
1

我可以頂替以下的正則表達式爲一個正則表達式在Perl替換多個正則表達式到perl的正則表達式的一個

message =~ s/&lt;span&gt;(.*?)&lt;\/span&gt;/<span>$1<\/span>/g; 
message =~ s/&lt;em&gt;(.*?)&lt;\/em&gt;/<em>$1<\/em>/g; 
message =~ s/&lt;ul&gt;(.*?)&lt;\/ul&gt;/<ul>$1<\/ul>/g; 
message =~ s/&lt;ol&gt;(.*?)&lt;\/ol&gt;/<ol>$1<\/ol>/g; 

回答

3

你可以這樣說:

message =~ s# 
     &lt; 
     (?<tag>span|em|ul|ol) 
     &gt; 
     (.*?) 
     &lt; 
    /
     \k<tag> 
     &gt; 
    # 
     <$+{tag}> 
     $2  
     </$+{tag}> 
    #xg; 
+2

這是一個非常優雅的答案,但它並不嚴格等同。比較「encode_entities」的結果foo「。由於這個答案沒有遞歸,所以輸出將是' <em> foo </em >'。 – amon

+0

@amon。是的,這是一個問題。嵌套標籤在將HTML與正則表達式結合時總會遇到問題。 –

+0

是的,這是一個問題...嵌套標籤的任何解決方案...我需要這個爲我的文本轉換... – manu

1

我不知道你需要捕獲標籤之間的內容。爲什麼不簡單替換標籤名稱周圍的&lt;&gt;

message =~ s#&lt;(/?(?:span|em|[uo]l))&gt;#<$1>#g;