2011-05-16 29 views
3

例如,我有以下代碼:需要一些幫助,正則表達式(PHP)

$string = "adf gggg eere value aaaa bbb (10) value 
ddttt ggg www (20) value ddttt ggg www dddd (40) "; 
preg_match("/(value).*(\(\d+\))/is", $string, $result); 
var_dump($result[2]); // outputs 40. 

我試圖獲得的第一個值(10)。上面的代碼輸出40是有道理的,但不是我想要的。字符串模式是:單詞「值」,然後是一些任何字符,然後是「(」,integer,「)」。看來我錯過了一些明顯的東西......我對正則表達式並沒有太多的工作,但我相信它可以用?<!value以某種方式解決,儘管如此,沒有運氣。

感謝您的任何幫助。

回答

3

.*是貪婪的,所以它會匹配儘可能多的字符可能的話,你想.*?將匹配完成比賽所需要的最小字符:

/(value).*?(\(\d+\))/ 
+0

非常感謝,這是那麼容易:) – a1ex07 2011-05-16 20:23:05

1
.*?value.*?\((\d+)\).* 

是*?一場不情願的比賽。

2

有什麼不對您的正則表達式是*是貪婪,並儘量匹配儘可能多的字母。

preg_match("#value.*?\((\d+)\)#is", $string, $result); 

但是你可以通過使用負類使其更快:

preg_match("#value[^(]+\((\d+)\)#is", $string, $result);