需要一些正则表达式的帮助(php)

时间:2011-05-16 20:12:14

标签: php regex

例如,我有以下代码:

$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有意义,但不是我想要的。字符串模式是:单词“value”,然后是多个任何字符,然后是“(”,整数,“)”。似乎我错过了一些明显的东西...我没有用正则表达式做太多工作,但我相信它可以用?<!value以某种方式解决,但到目前为止没有运气。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

.*贪婪,因此它会匹配尽可能多的字符,您希望.*?匹配完成匹配所需的最少字符:

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

答案 1 :(得分:2)

你的正则表达式有什么问题。*是贪婪的,并试图匹配尽可能多的字母。

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

但是你可以通过使用否定类来加快速度:

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

答案 2 :(得分:1)

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

成为*?不情愿的比赛。