簡體   English   中英

PHP正則表達式:使用問號獲取所有URL

[英]PHP Regular expression: Get all urls with question mark

我有這個正則表達式:

preg_match_all("/<a\\s.*?href\\s*=\\s*['|\\"](.*?)(?=#|\\"|')/si", $data, $matches);

查找所有網址,效果很好,但是如何修改它以僅查找帶有問號的網址?

例:

<a href="http://site.com/index.php">0</a><a href="http://site.com/index.php?id=1">1</a><a href="http://site.com/calc/index.php?id=1&scheme=Venus">2</a><a href="http://site.com/catalogue/data.php">3</a>

並且preg_match_all將返回:

http://site.com/index.php?id=1

http://site.com/calc/index.php?id=1&scheme=Venus

preg_match_all("@<a\s*href\s*=[\'\"]([^\'\"]+\?[^\'\"]+)[\'\"]@si", $data, $matches);

嘗試這個。

不要試圖使所有事情都發生在一個正則表達式中。 使用現有方法,然后分別檢查返回的URL,以查看其中是否帶有問號。

也就是說, 請勿使用正則表達式來解析HTML 您無法可靠地使用正則表達式解析HTML,並且您將一路面臨悲傷和沮喪。 一旦HTML超出您的期望,您的代碼就會被破壞。 有關如何使用已編寫,測試和調試的PHP模塊正確解析HTML的示例,請參見http://htmlparsing.com/php

安迪·萊斯特(Andy Lester)為您提供了正確的答案。

這是您的正則表達式:

<a\s.*?href\s*=\s*['|\"](.*?\?.*?)(?=#|\"|')

如此處所示:

http://rubular.com/r/LHi11VMMR9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM