我有一个具有以下结构的 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选项,否则您也不会匹配(至少从您的示例中来看)。
祝你好运!