[英]PHP preg_match - regex is unexpectedly greedy
我正在嘗試將一系列字符分隔成一串隔開的字母。 以下是一些示例:
我希望它與任何與“ e”匹配的東西,但我也希望兩個結果用於反向引用。 如果找到“ b”,則它應該是第一個反向引用,第二個應該是“ b”和“ e”之間的任何值。 如果沒有“ b”,則第二個反向引用是什么都沒關系。 這是我的測試代碼:
$regex = "( b)?( .*)?? e ";
preg_match("/{$regex}/", " a b c d e ", $matches);
這將返回$ matches“”(無)和“ abcd”。 但是,如果我刪除前面的空間,它將按我想要的方式工作:
preg_match("/{$regex}/", "a b c d e ", $matches);
這將返回$ match的“ b”和“ cd”。 答對了! 但是我需要在干草堆字符串中有該初始空間。 我以為(b)? 會因為? 最后,並期望(。*)?? 懶惰。 但是它更喜歡惰性(。*)? 超過它。
幾乎正則表達式的首要任務是從字符串的開頭開始匹配,然后只有THEN才考慮貪婪/懶惰。 這是真的?
這是一個演示 。
在真實的,非簡化的正則表達式中,可以有多個(b)嗎? 字符串,實際上每個復雜字符串都是數十個字符的正則表達式,因此在(。*)??中使用否定是不可行的。
我真正想了解的是-我希望第一和第二組都是可選的。 我希望第一組是貪婪的,第二組是貪婪的。 當前,第二組將覆蓋第一組,因為它可以在字符串中更早地匹配。
有沒有辦法修改正則表達式來完成我所需要的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.