我有這些字符串,並且我想匹配b=(\d+)
而不是ab=(\d+)
。我該怎麼做?避免正則表達式匹配,如果模式之前有字符串
"ab=10&b=20" -> 20
"b=20&ab=10" -> 20
"b=20" -> 20
"ab=10" -> no match
我有這些字符串,並且我想匹配b=(\d+)
而不是ab=(\d+)
。我該怎麼做?避免正則表達式匹配,如果模式之前有字符串
"ab=10&b=20" -> 20
"b=20&ab=10" -> 20
"b=20" -> 20
"ab=10" -> no match
你可以使用\b
,如:
\bb=(\d+)
其中僅在單詞邊界(\w
而不是\w
之間)相匹配。
這是我得到:
(?:[^a-zA-Z])(?:b=(\d+))
(?:[^a-zA-Z])
它不能以-Z開始。你可能想改變這一點,但你的想法 (?:b=(\d+))
我把它包在一組,使正則表達式結合起來,?:
確保\\1
仍將20
不適用於第二和第三種情況。 – Toto
/(?<!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
完美!謝謝。真的很感謝所有其他答案的傢伙!讓他們繼續來。 – Prasanth
Word Boundries,沒有想到這一點,聰明。 – Martijn
我意識到vim中的單詞邊界。 Vim很聰明! :) – Prasanth