2011-12-05 388 views
2

我在試圖瞭解更多關於正則表達式的過程中,我一直想知道以下幾點:正則表達式替換

如何點字符後插入一個空格,但只有當點字符不被數字包圍,例如它需要匹配。但不是22.22!

回答

4

這是zero-width assertions一個很好的案例:

$subject =~ 
    s/(?<=\.   # after a dot, 
     (?!   # but not matching 
      (?<=\d\.) # digit followed by dot before, AND 
      (?=\d)  # digit afterward 
     ) 
    )/ /x 
    g; 

我認爲你會發現自我解釋的意見! :)

2

嘗試:

echo "22.22"|perl -pe 's{(\D)\.(\D)}{$1. $2}' 
22.22 
echo "2x.x2"|perl -pe 's{(\D)\.(\D)}{$1. $2}' 
2x. x2