Regex 为什么此模式在preg_match()中不起作用?

Regex 为什么此模式在preg_match()中不起作用?,regex,preg-match,delimiter,Regex,Preg Match,Delimiter,它在regexr中运行良好。如果我像这样将其插入preg_match()中: $reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message); $reason=preg_match('/(?尝试改用此正则表达式,因为您已使用'?'切换贪婪: $reason = preg_match('/(?<=error\: )(.*)(?=\; Request)/', $message);` $reason=preg_m

它在regexr中运行良好。如果我像这样将其插入preg_match()中:

$reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message);

$reason=preg_match('/(?尝试改用此正则表达式,因为您已使用'?'切换贪婪:

$reason = preg_match('/(?<=error\: )(.*)(?=\; Request)/', $message);`

$reason=preg_match('/(?对我来说似乎没问题。请检查$message是否转义或与该regexr没有任何不同

$message = 'Request have return error: Invalid email syntax; Request: {"jsonrpc":"2.0","method":"add_contact","params":["420a42ea1685c9a273f26378aa82081b",{"campaign":"nfzM","name":"Chris Allen","email":"eric","ip":"127.0.0.1","customs":[{"name":"phone","content":"123456"},{"name":"address","content":"123 Fake Street"},{"name":"city","content":"Chicago"},{"name":"state","content":"IL"},{"name":"zipcode","content":"0001"},{"name":"country","content":"United States"},{"name":"company_name","content":"Acme"},{"name":"store_url","content":"http:\/\/www.google.com"},{"name":"timestamp","content":"06.10.13"},{"name":"subscriber_ip","content":"127.0.0.1"}]}],"id":2};';

$reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message);

var_dump($reason);

我认为您的问题不在正则表达式本身,请注意
不需要转义。不过,我建议您使用以下方法:

if (preg_match('~error: \K[^;]++(?=; Request)~', $message, $reason))
    print_r($reason);

注意$reason在哪里

这对我来说很好。似乎我有一个不在regexr示例中的错误新行,但它是由我的错误输出的。谢谢。
if (preg_match('~error: \K[^;]++(?=; Request)~', $message, $reason))
    print_r($reason);