2014-01-13 48 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