【发布时间】:2015-07-23 15:24:38
【问题描述】:
我没有找到任何运气,我相信这是因为我不知道用来解释我正在寻找什么的关键术语。我有以下正则表达式,用于区分一组 HTML 页面上的内部链接和外部链接:
(?<=a href=")[^http](.*?)(\.html")
所以它不会从以下位置选择“http://www.example.com/foo/bar.html”:
<a href="http://www.example.com/foo/bar.html">bar</a>
但会从以下位置选择“/foo/bar.html”:
<a href="/foo/bar.html">bar</a>
这一切都很好。现在我想对选定的字符串“/foo/bar.html”进行子选择以仅隔离“.html”部分。这可能吗?可能带有子字符串或其他向后/向前看?我在这里设置了一个示例:
https://www.regex101.com/r/gZ6bP5/2
这是为了在 Sublime 文本编辑器中进行全局查找/替换。所以我相信我仅限于此的正则表达式。我知道变量查找/替换是可能的,但我无法找到实际操作的示例。
编辑: 澄清一下,我必须区分外部/内部链接的正则表达式效果很好(尽管正如评论者所指出的那样不完美)。问题是关于如何只选择匹配的“.html”部分。
提前致谢!
【问题讨论】:
-
根据您发布的链接,
.html部分已经通过第二组提供给您。我不是 sublime 用户,但您应该可以通过/2、$2或${2}之类的方式访问它。 -
从技术上讲,您现有的模式无法按照您描述的方式工作。例如,它不会匹配
a href="hello.html",因为它以h开头。[^http]定义了一个字符类,所以它只匹配单个字符。要排除整个字符串的匹配项,您需要一个否定的前瞻(例如(?<=a href=")(?!http)(.*?)(\.html"))。
标签: regex sublimetext2