【发布时间】:2016-01-14 02:07:52
【问题描述】:
我在这里苦苦挣扎,试图弄清楚如何替换特定单词之后的所有双斜杠。
例子:
<img alt="" src="/pt/webf//2015//47384_1.JPG" height="235" width="378" />
<div>Don't remove this // or this//</div>
我希望上面的字符串看起来像这样:
<img alt="" src="/pt/webf/2015/47384_1.JPG" height="235" width="378" />
<div>Don't remove this // or this//</div>
请注意,img 标记中的双斜杠已被替换为仅一个斜杠,但在 div 标记中未受影响。如果双斜杠出现在单词之后,我只想替换它们:pt。
我尝试过这样的事情:
(?=pt)((.*?)\/\/)+
然而,据我所知,它的第一个问题是(?=) 不进行模式回溯。也就是说,它只会寻找第一个匹配的模式。第二个问题是它没有按我的预期工作。
https://regex101.com/r/kC4tA5/1
或者我的做法是错误的,因为正则表达式支持在 VBScript/Classic ASP 中并不广泛,我应该尝试分解字符串和进程,而不是尝试在一个正则表达式中完成所有操作? ??
任何帮助将不胜感激。
谢谢。
【问题讨论】:
-
损坏的 HTML 从何而来?来源可以修复吗?
-
它是 VBscript 的一部分,它从大量文件中读取某些 HTML 标签的 sn-ps(我没有编写脚本)。我可以更正实际文件,但文件是由用户创建的,所以这可能会一次又一次地弹出,这就是我试图解决用户 ID10T 错误的原因。事实上,可能有多个这样的文件。目前只找到一个。也许我最好使用 VBScript 来分解 sn-p,应用正则表达式,然后将其重新组合在一起,这样说安全吗?
-
我认为它正在按预期工作,但问题是您只会捕获最后一次迭代,根据“解释”窗格中的注释:
Note: A repeated capturing group will only capture the last iteration. Put a capturing group around the repeated group to capture all iterations or use a non-capturing group instead if you're not interested in the data -
我也找不到使用单个正则表达式的任何方法。我认为你需要做类似
if /pt/ then s/\/{2,}/\//g(伪代码)的事情。 -
通常不建议在 HTML 上运行正则表达式。正则表达式在技术上无法解析 HTML,痛苦和绝望就在这条路上。通常你会使用解析器来分离 HTML。
标签: regex vbscript asp-classic backslash slash