如何使用積極的後視圖來匹配超過1次使用貪婪+
?正則表達式 - 積極向後看問題
這工作:
(?<=\w)\w+
但我需要匹配所有\ W類似於:
(?<=\w+)\w+
的語法錯誤是在第二個例子,這是行不通的。
如何製作積極的lookbehind匹配多次出現?
如何使用積極的後視圖來匹配超過1次使用貪婪+
?正則表達式 - 積極向後看問題
這工作:
(?<=\w)\w+
但我需要匹配所有\ W類似於:
(?<=\w+)\w+
的語法錯誤是在第二個例子,這是行不通的。
如何製作積極的lookbehind匹配多次出現?
你可能只是想沒有任何lookbehinds匹配,然後使用您的捕獲組:
if (preg_match('~[abc]+([cde]+)~', $string, $matches)) {
echo $matches[1]; // will contain the [cde]+ part
}
一個非常骯髒的方式做到這一點,是扭轉字符串,並使用正前瞻代替。這是我在JavaScript中使用(支持有沒有lookbehinds :()一招
所以必須做這樣的事情:
$string = 'This is a long string that must show this is what will happen';
$str_rev = strrev($string);
if (preg_match('!(si)(?=\w+)(\w+)!i', $str_rev, $matches)) {
print_r($matches);
}
上面的代碼將匹配是在本的出現字符串中,第二\ w +是隻是爲了顯示它匹配,並在你的例子是沒有必要的。
請記住,這種技術只可能在你使用greedines只有一個方向對於Lookbehind/aheads(例如你不能在\ w +和\ w +一起使用向後追逐)
非常有趣。 – sawa 2011-03-31 19:24:04
對不起,但是在lookbehinds中沒有量詞!
我發現這個在perlretut
的 正則表達式先行(?=正則表達式)可以匹配 任意正則表達式,但是回顧後 (?< =固定的regexp)僅適用於固定的寬度
我認爲這也適用於PHP的正則表達式引擎。
你究竟在做什麼? – Gumbo 2011-03-31 18:02:51
您正在討論_variable length lookbehind_。很少有正則表達式引擎支持這一點。 .NET和JGSoft引擎是我所知道的唯一的引擎。我會重複甘博所問的......你需要匹配什麼? – ridgerunner 2011-03-31 19:33:49
感謝您的評論 - 我正在嘗試構建一個匹配短語而不僅僅是單個單詞的標籤雲。可變長度lookbehind是比較一個字符串在整個字符串中的不同位置。 – Kit 2011-03-31 19:43:55