在php正则表达式中逃避斜线

时间:2014-01-13 19:57:29

标签: php regex preg-match

我尝试用PHP执行preg_match但是我无法正确地逃避斜杠。 preg_match应返回Prozessor和第一个斜杠之间的子范围

$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 

我做错了什么

3 个答案:

答案 0 :(得分: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 :(得分:2)

使用非贪婪的量词:

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

或字符类:

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

另请注意,如果更改正则表达式分隔符,则无需担心转义它:

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

答案 2 :(得分:0)

这有效:

$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"

或者,您可以在正则表达式的末尾添加一个不合理的修饰符:

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

此处提供更多信息:http://php.net/manual/en/reference.pcre.pattern.modifiers.php