【发布时间】:2022-01-09 23:54:58
【问题描述】:
我正在使用 preg_match 来匹配某些 HTML 标记中的第一个联系人页面链接。
我花了很多时间调查、阅读 PHP 正则表达式文档、调试,并试图在 StackOverflow 上找到类似的解决方案。有很多关于正则表达式的建议,只是找不到特定于我的子模式问题的建议。
示例 HTML:-
<ul class='root dropdown'><li class="item1 current-item-root first-item current-item"><a href="/">Home</a></li><li class="item2"><a href="/contact-us">Contact Us</a></li><li class="item3 parent category-page"><a
而不是返回
/contact-us
返回
"/">Home</a></li><li class="item2"><a href="/contact-us
这里是代码:-
preg_match( '/href.{1,5}"(?P<link>.{0,50}contact.{0,20})"/isxU', $input_line, $output_array);
我希望正则表达式 U 设置使 {0,50} 不贪婪,但它抓取的文本过多。
该代码旨在获取各种格式的 href 链接,如下所示:-
/contact
/contact-us
websitename.com/contact-me
这是一个工作示例:- https://www.phpliveregex.com/p/Dh2
【问题讨论】:
-
也许
href=".*?\K(/?contact[^"]+)"但需要定义您期望允许的内容,绝对的,相对的,两者兼而有之?此外,解析器会更好,这将不仅仅匹配链接。 -
感谢您的回复和想法,尚未成功。我已经开始研究在子模式之外进行更好的匹配。我想知道的是为什么我的子模式抓取了这么多文本并且与 href 链接周围的双引号不匹配。例如,如果我将 {0,50} 减少到 {0,20),它会起作用,但它需要更大以适应所有情况。
-
它适用于定义的用例。也许添加更多用例/示例。这是演示regex101.com/r/sxpj4I/1
标签: php regex web-scraping