是的,SO上有数百个[正则表达式] [html]主题,但我检查的前30个主题并没有帮助我解决问题。
我有745个链接(所有亲戚,他们必须保持亲戚)到我网站上的文件。我需要找到所有这些链接并在它们之前和之后附加数据。我还需要捕获并使用链接文本。
我已经尝试了几个表达式,下面的正则表达式是我能得到的最接近的,但它还不够好 - 它不断找到一些其他href的实例到一个不同的文件并将内容一直捕获到{ {1}}我真正关心的文件。
</a>
在上面,我需要捕获文件的相对路径以及可能存在的任何锚点,以及实际的链接文本。
我正在使用什么样的正则表达式??
没关系,但我正在使用Adobe Dreamweaver来执行搜索。
答案 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>
,您将获得:
a.fparameters.html
#jobmaxnodecount
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>
,您只能获得一场比赛:
a.fparameters.html
#rsvsearchalgo
RSVSEARCHALGO
答案 2 :(得分:1)
首先,永远不要这样做:(.)*
......或者这样:(?:.)*
第一个字符一次消耗一个字符并在一个组中捕获它,每次都覆盖以前捕获的字符。第二个通过使用非捕获组避免了大部分开销,但它仍然只在该组内一次匹配一个字符;何必?它所做的只是混乱了正则表达式。
添加?
以使其不贪婪 - 例如(.)*?
- 不会让情况变得更糟,但也无济于事。并将其粘贴到另一个组中并使该组可选 - 即((.)*?)?
- 是catastrophic backtracking.的配方。但是除了性能方面的考虑因素,当我看到一个附有量词的捕获组时,它几乎总是在作者身上出错。 (ref)
至于你的问题,我的解决方案几乎与Oscar's相同:
<a href="([^#"]*?a\.fparameters\.html)(?:#([^"]*))?">([^<>]*)</a>