2014-01-13 50 views
1

我尝试执行preg_match与PHP,但我不能正确逃脱斜线。该的preg_match应该返回Prozessor和第一斜线之间subsrting在PHP正则表达式逃脱斜杠

$str="Prozessor: AMD A-Serie A8-4500M/19 GHz (28 GHz) /"; 

preg_match('/Prozessor: (.*) \//', $str, $matches) 

Prozessor: AMD A-Serie A8-4500M/19 GHz (28 GHz)/

我想获得处理器的应该给我回

AMD A-Serie A8-4500M 

名,我做错了什么

回答

2

使用非贪婪量词:

preg_match('/Prozessor: (.*?) \//', $str, $matches) 

或字符类:

preg_match('/Prozessor: ([^\/]*) \//', $str, $matches) 

另外请注意,如果你改变你的正则表达式的分隔符,你不会有担心逃脱它:

preg_match('#Prozessor: ([^/]*) /#', $str, $matches) 
+0

非常感谢你的帮助 – fefe

2

使用/Prozessor: (.*?) \//。这将取代greedy selector with a lazy selector。例如:

$str="Prozessor: AMD A-Serie A8-4500M/19 GHz (28 GHz) /"; 
preg_match('/Prozessor: (.*?) \//', $str, $matches); 

var_dump($matches[1]); 
// string(33) "Prozessor: AMD A-Serie A8-4500M" 
+1

谢谢你的工作 – fefe

0

T他的作品:

$str="Prozessor: AMD A-Serie A8-4500M/19 GHz (28 GHz) /"; 
preg_match('/^Prozessor: (?P<prozessor>[a-z0-9\s-]+) \//i', $str, $matches); 
var_dump($matches['prozessor']); 

输出

string(20) "AMD A-Serie A8-4500M" 

或者,你可以添加一个ungreedy修改你的正则表达式的结尾:

preg_match('/Prozessor: (.*) \//U', $str, $matches) 

点击此处了解详情:http://php.net/manual/en/reference.pcre.pattern.modifiers.php