RegEx查找指向特定文件的所有可能的相对链接 - 也捕获链接文本

时间:2013-02-12 20:10:30

标签: regex dreamweaver

是的,SO上有数百个[正则表达式] [html]主题,但我检查的前30个主题并没有帮助我解决问题。

我有745个链接(所有亲戚,他们必须保持亲戚)到我网站上的文件。我需要找到所有这些链接并在它们之前和之后附加数据。我还需要捕获并使用链接文本。

我已经尝试了几个表达式,下面的正则表达式是我能得到的最接近的,但它还不够好 - 它不断找到一些其他href的实例到一个不同的文件并将内容一直捕获到{ {1}}我真正关心的文件。

</a>

在上面,我需要捕获文件的相对路径以及可能存在的任何锚点,以及实际的链接文本。

我正在使用什么样的正则表达式??

没关系,但我正在使用Adobe Dreamweaver来执行搜索。

3 个答案:

答案 0 :(得分:1)

试试这个正则表达式:(更新)

href="([^"]*?)myFile\.html#?([^"]*).*?>(.*?)<\/a>

在此解释演示:http://regex101.com/r/lA6vB7

答案 1 :(得分:1)

以下正则表达式适用于您所需的内容:

<a href="([^"]*?a\.fparameters\.html)(#[^"]+?)?".*?>(.*?)<

即使您有以下网址,它也会有效:

<a href="a.fparameters.html">JOBMAXNODECOUNT</a>

没有#xxxx

举几个例子:

对于<a href="a.fparameters.html#jobmaxnodecount">JOBMAXNODECOUNT</a>,您将获得:

  • 第1组:a.fparameters.html
  • 第2组:#jobmaxnodecount
  • 第3组:JOBMAXNODECOUNT

对于<a href="commands/mjobctl.html#modify">mjobctl -m</a> to modify the job after it has been submitted. See the <a href="a.fparameters.html#rsvsearchalgo">RSVSEARCHALGO</a>,您只能获得一场比赛

  • 第1组:a.fparameters.html
  • 第2组:#rsvsearchalgo
  • 第3组:RSVSEARCHALGO

答案 2 :(得分:1)

首先,永远不要这样做:(.)* ......或者这样:(?:.)*

第一个字符一次消耗一个字符并在一个组中捕获它,每次都覆盖以前捕获的字符。第二个通过使用非捕获组避免了大部分开销,但它仍然只在该组内一次匹配一个字符;何必?它所做的只是混乱了正则表达式。

添加?以使其不贪婪 - 例如(.)*? - 不会让情况变得更糟,但也无济于事。并将其粘贴到另一个组中并使该组可选 - 即((.)*?)? - 是catastrophic backtracking.的配方。但是除了性能方面的考虑因素,当我看到一个附有量词的捕获组时,它几乎总是在作者身上出错。 (ref

至于你的问题,我的解决方案几乎与Oscar's相同:

<a href="([^#"]*?a\.fparameters\.html)(?:#([^"]*))?">([^<>]*)</a>