簡體   English   中英

正則表達式模式(…)+多次不匹配

[英]Regex Pattern (…)+ not matching multiple times

我正在構建一個PHP腳本,該腳本將篩選cURL請求的HTML內容並匹配URL的模式,以便我可以操縱添加GET標記以跟蹤出站鏈接。

我有可以使用的Regex模式,但是我不能多次匹配它。 它甚至不會找到它確實匹配的項目的副本。

這是示例HTML,目前僅與第一個Anchor標簽匹配:

`<html><head>
 <title></title>
</head>
<body class="body class">
 <div>
   <a title="1hubwhrrstn" href="http://www.example.com?tag=9qgbc"></a>
   <a name=""></a>
   <a class="3hubwhbbsrstn" href="http://www.example.com?tag=uqgibc"></a>
   <a class="4whbihbw4bsetrrstn" href="http://www.example.com?tag=9uq4i"></a>
   <a href="http://www.example.com?tag=9uq4i" class="4whbihbstn"></a>
 </div></body>
</html>`

我正在使用的Regex模式是: (<a.*href=".*".*><\\/a>)+/im ,它僅與第一個錨點實例匹配。

另外,我找不到一種方法來匹配新行或全部匹配-它給了我一次匹配,即使它們在同一行上也一起運行多個Anchor標簽,即使我使用的是捕獲組以將模式匹配到一個錨標簽。 因此,在這種情況下,它會找到一個匹配項-即使是同一行中的兩倍錨點也是如此:

`<html><head>
 <title></title>
</head>
<body class="body class">
 <div>
   <a title="1tn" href="http://www.example.com"></a><a class="3htn" href="http://www.example.com"></a>
   <a name=""></a>
   <a class="4whbihbw4bsetrrstn" href="http://www.example.com?tag=9uq4i"></a>
   <a href="http://www.example.com?tag=9uq4i" class="4whbihbstn"></a>
 </div></body>
</html>`

我經歷了兩個小時的修補工作,仔細檢查了標志和數量詞,在進行regex101.com時進行了測試,無法弄清楚我在哪里犯錯了。

任何幫助都會很棒。 非常感謝!

您的正則表達式(<a.*href=".*".*><\\/a>)+/im是貪婪的。 為了減少貪婪感,您可以拒絕錨標記中帶有<任何模式:

(<a.*href=".*".*>[^<]*<\/a>)+/im

這解決了另一個潛在的問題:錨標簽中沒有內容是不尋常的,並且此模式匹配標簽中的任何內容,只要它不是另一個標簽即可(當然,html中允許在href中包含其他標簽,因此此解決方案可能不會足夠)。

另外,我不確定您最后是否需要m修飾符。 它是用於跨越多行的匹配模式,似乎您的匹配模式都在一行上。

我猜您正在使用preg_match()嗎? 使用preg_match_all()進行全局正則匹配,因為您不能將g修飾符與preg_match()

暫無
暫無

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

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