2014-02-13 50 views

回答

5

你可以使用\b,如:

\bb=(\d+) 

其中僅在單詞邊界(\w而不是\w之間)相匹配。

+0

完美!謝謝。真的很感謝所有其他答案的傢伙!讓他們繼續來。 – Prasanth

+1

Word Boundries,沒有想到這一點,聰明。 – Martijn

+0

我意識到vim中的單詞邊界。 Vim很聰明! :) – Prasanth

0

這是我得到:

(?:[^a-zA-Z])(?:b=(\d+)) 

(?:[^a-zA-Z])它不能以-Z開始。你可能想改變這一點,但你的想法 (?:b=(\d+))我把它包在一組,使正則表達式結合起來,?:確保\\1仍將20

+1

不適用於第二和第三種情況。 – Toto

1

使用negative lookbehind

/(?<!a)b=(\d+)/ 

現在,這將匹配任何數字後跟b=,如果沒有前面的字符a

測試用例:

$array = array(
    "ab=10&b=20", 
    "b=20&ab=10", 
    "b=20", 
    "ab=10" 
); 

foreach ($array as $str) { 
    if (preg_match('/(?<!a)b=(\d+)/', $str, $matches)) { 
     echo $matches[1], PHP_EOL; 
    } else { 
     echo "No match", PHP_EOL; 
    } 
} 

輸出:

20 
20 
20 
No match 

Demo