如何在正则表达式搜索中排除 HTML 标签

How to exclude an HTML tag in regex search

我正在使用 powerGrep 查找这些实例:

BLOCK 1:

<td class="danish">kat
<?php audioButton("../../audio/words/dog","dog");?></td>

但我的文件中也有这样的实例:

BLOCK 2

<td class="danish">kat</td>
<td><?php audioButton("../../audio/words/dog","dog");?></td>

我只想找到 BLOCK 1,而不是 BLOCK 2。

我试过使用 (?!),如

.*<td class(.*?)>(.*)(?!</td>)
.*<\?php audioButton\("(.*)/.*",".*"\);.*\?></td> 

我能否以某种方式从搜索中排除 </td> 标记,从而忽略 BLOCK 2?

我不确定你为什么真的只想匹配第一个单元格标签,但要执行此操作你可以尝试:

<td[^>]*>\s*(?:.(?!</td>))+\s*<\?php audioButton\("[^"]*/(.+?)","(.*?)"\);.*?\?>.*?</td> 带有 g 标志。

看到它在这里工作:https://regex101.com/r/tI4rL4/1

[编辑]

您还可以在此处查看 dogcat 的替换:https://regex101.com/r/tI4rL4/2

它可能并不完美,因为这个问题有点太模糊了,但它确实有效。如果您需要改进或调整或需要一些解释,您可以问我!