PHP VerbalExpressions中使用stopAtFirst匹配首个目标的方法问询
使用VerbalExpressions提取HTML数据时匹配首个目标内容的问题
问题场景
我需要从以下HTML文本中提取数据:
<p>🥇 | A<a href="https://t.me/ATHcoinEth">ll Time High Community Chat $ATH<br> </a><br> A<a href="https://t.me/ATHcoinEth">ll Time High </a>Buy!<br> 💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹💹</p> <p>💵 0.07 ETH ($127.61)<br> </a><br> 🔹 0x96f7…89a6 | Txn<br> ✅ New Holder<br> 🔼 Market Cap $52,537</p> <p>🥇 Chart ✨ Trade<br> 🟢 Event<a href="https://etherscan.io/address/0x96f7bb6b05c65bfc894acfd73a75254dbdc189a6">s 🔹 Trendin</a>g<a href="https://etherscan.io/tx/0xfc8c35dab30caf5c6d5d422e51bf5c88646eefe5b64f8e09e400a93af523345b"> hr</a>ef=<b>"https://t</b>.me/ETHTRENDING/<b>106566</b>1"><a href="https://dexscreener.com/ethereum/0xc300545b59cce388c29227c0c9269139024df039">a></a><a>href=</a><a href="https://flooz.xyz/trade/0x70c85f3f74110f26478baf8bbd0ac377ca4288f7?network=eth&refId=HtwiZx">"http</a>s://t.me/BuyBotTracker"></a><br></p>
当前使用的Verbal表达式为:
start, then "🥇 |", something, then "<br> </a><br>", end
但由于<br> </a><br>在文本中多次出现,希望匹配到第一个出现的该内容时停止匹配,尝试多种方法均无效,寻求解决方案。
解决方案
VerbalExpressions中的something默认是贪婪匹配,会匹配到最后一个目标字符串。要实现匹配首个目标的需求,可通过以下两种方法调整:
方法1:使用anythingBut限定匹配范围
将原表达式中的something替换为anythingBut("<br> </a><br>"),该方法会匹配所有不包含目标结束字符串的内容,遇到第一个<br> </a><br>时立即停止。对应的Verbal表达式:
start, then("🥇 |"), anythingBut("<br> </a><br>"), then("<br> </a><br>"), end
方法2:开启非贪婪匹配(版本支持时)
若你的VerbalExpressions版本支持lazy()方法,可通过该方法开启非贪婪模式,让匹配尽可能早地结束。调整后的表达式:
start, then("🥇 |"), something().lazy(), then("<br> </a><br>"), end
补充说明
如果使用的VerbalExpressions版本不支持lazy(),优先采用anythingBut方案,它能精准限定匹配内容不包含结束标记,确保只捕获到第一个目标结束符前的内容。
内容的提问来源于stack exchange,提问作者Stephen Senkomago Musoke
相关产品推荐
相关产品推荐

