例如,对于包含大量如下代码片段的代码:
<section>
<p><b>test</b></p>
</section>
我希望能够搜索:
<section>
<p><b>
这样我就可以将其替换为
<section>
<h2>
但不能替换<p><b>
前面没有节标签的其他节。
因此,我无法搜索,<p><b>
但 NetBeans 不允许我粘贴带有空格的选择。因此,我假设我需要使用正则表达式搜索以下内容:
<section>(any-white-space)<p><b>
但我不太清楚该怎么做。如能得到任何帮助我将不胜感激。
答案1
我已经在 jEdit 中测试过它(它也是用 Java 编写的,就像 Netbeans 一样,但我目前无法访问 Netbeans)。请尝试以下正则表达式模式:
(?<=<section>)(\s*)<p><b>([^<]+)</b></p>
用这个来代替:
$1<h2>$2</h2>
正则表达式模式表示“匹配一个序列,该序列以<section>
任意数量的空格开头(存储为捕获组 1),然后包含<p><b>
至少一个不是的字符<
(并将这些字符存储为捕获组 2)并以</b></p>
“结尾”。
替换模式只是说“从捕获组 1 中的空格开始,然后输出在元素<h2>
中找到的捕获组 2 中的字符<b>
,然后输出</h2>
。”捕获和输出空格意味着新的 h2 元素将以与 p 元素相同的换行符和制表符开头,因此任何漂亮的格式都不会因更改而遭到破坏。
请记住,正则表达式无法知道它相对于 DOM 结构的位置,因此它无法知道使用 h1、h2、h3、h4 等是否正确。但如果您只需要,<h2>
请尝试一下。
(实际上,如果您使用 HTML5,那么您可以使用一个<h1>
元素或任何其他起始数字来开始每个新的部分元素,并且需要兼容的浏览器来自动处理标题级别。)