情况
这是我在 Dreamweaver 中用于 Regex 替换的 Regex & Substitution::
(( and )|( that )|( include )|( includes )|( including ))
$1<br/>\n
2.
在我Replace All
在当前文档中之后。我发现了一些错误。
例如::
create new Flux and Mono instances
正在被替换为(错误的)
create new Flux that <br/>
Mono instances
而不是(正确的)
create new Flux and <br/>
Mono instances
(regex101 可视化 => https://regex101.com/r/hJTqFg/1)
问题
为什么会这样?
我怎样才能避免这种情况?(更安全的替换方法?)
你以前有过这种情况吗?
笔记:
- 在这个文档中发生了很多替换——大约 300 多个——这个文档很大。
当更换过程进行时。我可以看到 Dreamweaver快速滚动浏览源代码。
而不是立即替换所有替换(这与其他文本编辑软件所做的不同)。
这是正常的吗?
这让我怀疑问题出在替换速度上——延迟使 Dreamweaver 以某种方式将文本替换为先前替换的文本...?--(但 idk,idk Dreamweaver 内部是如何实现的..)
(只有很少的错误——但是,这不应该发生。)
(替换是专门针对html标签的
<p>
(我不认为这是问题))(更确切地说,
原文是
create new <code class="literal">Flux</code> and <code class="literal">Mono</code> instances
而不仅仅是
create new Flux and Mono instances
(为了可读性,我把它简化了,但没关系)。)
使用 Dreamweaver 2021 版
替换在
.xhtml
文件上
由于正则表达式模式,它不仅被替换为其他字符串(即正则表达式模式)
|
。也有一些字符消失的错误......(虽然,这种情况更加罕见)
例如:
blockhound
变成lockhound
;1.0.1.RELEASE
变成.0.1.RELEASE
;(我不只是做了 1 个正则表达式替换模式,还有其他我应用于此文档的模式;
但是,上面的这两个,当然不应该在我用于本文档的任何正则表达式模式中匹配......)
我做了另一个正则表达式替换测试,通过使用中的选项
(Documents in) Folder ...
,而不是Current Document
-- 所以,
scrolling
不会出现的效果(并且这似乎过程更快)尽管如此,即使这样,仍然存在错误。
scrolling
- 因此,似乎错误的发生与Dreamweaver 中的正则表达式替换无关。
下面是上面的简化示例(如果上面包含冗余信息)
简而言之:
0 . 你有一些文字
<p>AA and BB</p>
1. 如果您使用的正则表达式模式包含or
语法|
,例如:
(( and )|( that ))
2. 并且您的替换包含一个捕获组$1
,例如:
$1foobar
3. 并且您在 Dreamweaver 中针对特定标签执行正则表达式替换所有内容,例如:(我称之为)<p>
specific-targeting-replacement tag
4.
并且有一个标签(一个不是 type 的标签
<p>
),上面<p>
说:(<li>
我称之为non-specific-targeting-replacement tag
)并
<li>
包含单词that
(该单词出现在与相邻that
的正则表达式模式(带有语法)中),or
and
(我称这个词
that
为adjacent-replacement word
我称这个词
and
为to-be-replaced word
)
<ul>
<li>xxxx that xxxx</li>
</ul>
5. 那么该标签<p>
下方的标签中的文本<li>
将被替换为错误的字符串(the adjacent-replacement word
)。例如:
它应该被替换为(正确的)
<p>AA and foobarBB</p>
但它可能被替换为(错误)
<p>AA that foobarBB</p>
测试文件:
<!DOCTYPE html>
<html>
<body>
<p>AA and BB</p>
<p>AA and BB</p>
<ul>
<li>xxxx that xxxx</li>
</ul>
<p>AA and BB</p>
<p>AA and BB</p>
</body>
</html>
这是一个错误。目前在 Dreamweaver 中没有很好的解决方案。但是有一些解决方法。
解决方案1(解决方法,非常有限)
使用Dreamweaver时。不要在您的正则表达式模式中使用
|
(or
) 语法和语法。grouping
您需要一一更换。(这是对正则表达式的巨大限制)
replacement queries
=>链接。)解决方案2(推荐)
使用Calibre & Python函数进行替换。
例如::
解决方案3(推荐)
与解决方案 2 相同,但使用Java代码。
这是使用 Notepad++ 的解决方案:
(?:<p>|\G)(?:(?!</p>).)*?\b(?:and|that|includes?|including)\b\K(?=.*?</p>)
foobar
. matches newline
解释:
截图(之前):
截图(之后):