
我有一個具有以下結構的 HTML 程式碼:
<td class="tar">
<div class="bubble in">
Some Text, I want to keep! And maybe even an image: <img src=
"12345.png" width="22" height="22" alt="0" class="example" /><br />
<span class="time"><div style="text-align:right">17:14</span></div>
</div>
</td>
</tr>
<tr>
<td class="tal">
<div class="bubble out">
Some Text, I want to keep!<br />
<span class="time"><div style="text-align:right">17:15</span></div>
</div>
</td>
</tr>
這是兩個參與者「冒泡」和「冒泡出」的聊天結構。現在我想用影像延長「氣泡」的時間碼。
這是我想出來的:
找什麼:
<div class="bubble in">[^"]*<span class="time"><div style="text-align:right">([0-9]*[0-9]*):([0-9]*[0-9]*)</span></div>
用。
<div class="bubble in">\1<span class="time"><div style="text-align:right">\2\3\4\5\6 <img src= "test.png" width="16" height="10" alt="0"/
搜尋有效,但取代 \1 不起作用。你能幫我嗎?先致謝
答案1
不起作用\1
,因為您沒有捕獲該組 - 您需要在它兩邊加上括號。但是,似乎還有更多問題...當我在 Notepad++ 中嘗試使用您的範例時,它沒有找到匹配項,而且我也不希望它找到匹配項。
您目前的模式在開放 div 標籤中尋找氣泡,後面跟著任意數量的非雙引號字符,最後是時間跨度標籤。在您的範例中,您首先在 img 標記中使用雙引號,因此它不符。
在時間捕獲部分,也發生了一些奇怪的事情:你的[0-9]*
意思是任意多次出現數字0-9,但隨後你又重複了。我猜你真的只是想要 0-9 兩次,後面跟著一個冒號,再後面跟著兩個。
所以:
<div class="bubble in">(.*?)<span class="time"><div style="text-align:right">([0-9]{2}):([0-9]{2})</span></div>
他們.*?
會非貪婪地尋找匹配。但是,如果 div 中的氣泡沒有時間跨度,那麼它將直接從該 div 進入其他任何內容,直到找到時間跨度。希望這是你能夠應對的事情,否則事情會變得非常複雜。告訴[0-9]{2}
正規表示式您正好需要兩個。如果時間上沒有前導零,請將其變更為{1,2}
在 1 和 2 之間尋找的值。
最後,在您的替換中 - 現在有 3 個捕獲組...“一些文本,我想保留!...”,小時和分鐘。所以\4\5\6
不在場。哦,不要忘記勾選該. matches newline選項,否則您將不會匹配(至少從您的示例來看)。
祝你好運!