我的目標是將尾隨的所有實例 - 替換爲標籤括號內的尾隨+。讓我們假設要被替換的行看起來是這樣的:Perl:標籤分隔字符串中的全局替換
<h> aa- aa- </h> <h> ba- ba- </h>
,應該事後看起來像
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
首先我嘗試這樣表達:
s/<h>(.*?)-(.*?)<\/h>/<h>$1+$2<\/h>/g;
其產生這樣的輸出:
<h> aa+ aa- </h> <h> ba+ ba- </h>
g op這會導致每行有多個替換,但僅限於每個標記支架的第一個實例(並且只有在兩個圓括號都包含問號時)。
爲了縮小這個問題,我然後試圖實現不考慮標籤的替換。表達
s/(.*?)-(.*?)/$1+$2/g;
確實導致所需結果
<h> aa+ aa+ </h> <h> ba+ ba+ </h>
這將替換標記括號的外面,以及,當然。
那麼,我的第一個表達式有什麼問題,我如何實現我在標籤括號內完全替換的目標?
如果之前一切以字符集的任何限制的'-'你可以利用它。 – adamse 2010-08-01 11:36:18
您應該使用完整的解析器,而正則表達式不是。 – Ether 2010-08-01 17:08:54