2013-07-23 76 views
0

一個字符串的一部分我的HTML代碼,看起來像這樣:使用Perl刪除所有空格用Perl的正則表達式

<a href="TheWholeWorld"> 

<a href="The Whole World"> 

和想使它看起來像這樣。我該怎麼做呢?謝謝!

+0

你可以直接在HTML本身中更改它嗎?我不明白爲什麼要使用perl !!!!!你想在運行時改變嗎? – Hariharan

+0

我反覆處理電子郵件,我需要手動替換它們幾十次,所以如果可能的話,我會盡量自動化。 –

回答

0

短的代碼片段

$a='<a href="the whole world">'; 
($c=$a)=~s/("\S+|\S+|")\s*/$1/g; 
print $c; 

正則表達式是如何工作的:

s/("\S+|\S+|")\s*/$1/g; 
    ^^^ ^^^ 
     + + +  + + +-- global flag, apply repeatedly 
     | | |  | +-- substitute in the first capture group 
     | | |  +-- white space, but outside of the capture group 
     | | +-- | alternative operator 
     | +-- \S+ match any non zero amount of non white space 
     +-- start capturing group 

所以它找到"內的非空白,並把它在一個捕獲組

白色空間每個詞之間沒有進入捕獲組

這種反覆發生和捕獲組被複製出來的結果,但白色的空間並不

這是更好地使用基於XML片段解析器,因爲它更容易在長期運行維護

1
$html = '<a href="The Whole World">'; 
$html =~ s/(?<=href=")([^"]+)/ $1 =~ s!\s+!!gr /e; 
print $html; 

此作品修改後的文字href="直到以下"
通過第二次替換修改文本以從中刪除每個空格。

這使用Perl替換命令的r修飾符,該修飾符僅在更高版本的Perl中可用。如果你不支持Perl的版本,那麼請使用以下代碼:

$html =~ s/(?<=href=")([^"]+)/ my $text = $1; $text =~ s!\s+!!g; $text /e; 
相關問題