【发布时间】:2011-05-05 15:26:28
【问题描述】:
我有这个正则表达式
(?:\<a[^*]href="(http://[^"]+?|[^"]+?\.pdf)"+?[^>]*?)>
此正则表达式的重点是捕获具有以“http://”开头或以“.pdf”结尾的 href 的锚点的每个结束标记 ('>')。
正则表达式有效,但它正在捕获锚的第一部分,我绝对不需要捕获。
在以下示例中,除了第二个(这很好)之外,所有示例都匹配,但只应捕获最后一个括号,事实并非如此。
<a href="http://blabla">omg</a>
<a href="blabla">omg</a>
<a href="http://blabla.pdf">omg</a>
<a href="/blabla.pdf">omg</a>
例如:如果我们取第一个匹配项:
<a href="http://blabla">
我只想捕获最后一个括号(我用括号括起来的那个):
<a href="http://blabla"(>)
那么为什么非捕获组正在捕获?而我怎么只能抓住锚的最后一个括号
即使我将正则表达式简化为以下内容,它仍然不起作用
(?:\<a[^*]href="http://[^"]+"+[^>]*)(>)
谢谢,
【问题讨论】:
-
您能否提供一个示例来说明您试图在字符串中捕获的内容?
-
我认为更好的方法是使用 HTML 解析器并将正则表达式应用于每个 href 属性。
-
@mikerobi 可能会很好,问题是我唯一的工具是一个简单的查找和替换我无法隔离任何捕获的组,匹配需要是我想要替换的字符串
-
您使用什么语言? PHP?
-
另外,为什么加号 (
+) 和星号 (*) 后面有问号 (?)?