2

是的,SO 上有数百个 [regex] [html] 主题,但我检查的前 30 个主题对我的问题没有帮助。

我有 745 个总链接(都是相对的,并且它们必须保持相对)到我网站中的一个文件。我需要找到所有这些链接并在它们之前和之后附加数据。我还需要捕获和使用链接文本。

我已经尝试了几个表达式,下面的正则表达式是我能得到的最接近的,但它还不够好 - 它不断地在不同的文件中找到一些其他 href 的实例,并将内容一直捕获到</a>我的文件的其实在乎。

<a href="((.)*?)?myFile.html((.)*?)?>((.)*?)?</a>

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

我应该使用什么正则表达式?

没关系,但我正在使用 Adob​​e Dreamweaver 执行搜索。

4

3 回答 3

1

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

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

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

于 2013-02-12T20:27:01.077 回答
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
  • 第 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>你只会得到一场比赛

  • 第一组:a.fparameters.html
  • 第 2 组:#rsvsearchalgo
  • 第 3 组:RSVSEARCHALGO
于 2013-02-12T20:27:54.443 回答
1

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

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

添加?以使其不贪婪 - 例如(.)*?- 不会让它变得更糟,但它也无济于事。将其粘贴在另一个组中并使该组成为可选的——即((.)*?)?——是灾难性回溯的秘诀。. 但是除了性能考虑之外,当我看到一个附加了量词的捕获组时,作者几乎总是会出错。(参考

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

<a href="([^#"]*?a\.fparameters\.html)(?:#([^"]*))?">([^<>]*)</a>
于 2013-02-12T22:47:28.900 回答