http://gskinner.com/RegExr/?355lr
它在那个正则表达式中工作正常。如果我像这样将它插入我的 preg_match() 中:
$reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message);
它总是返回一个 0。
我认为它与 preg_match() 期望模式被格式化的方式有关?
http://gskinner.com/RegExr/?355lr
它在那个正则表达式中工作正常。如果我像这样将它插入我的 preg_match() 中:
$reason = preg_match('/(?<=error\: )(.*?)(?=\; Request)/', $message);
它总是返回一个 0。
我认为它与 preg_match() 期望模式被格式化的方式有关?
尝试改用此正则表达式,因为您使用过 '?' 切换贪心:
$reason = preg_match('/(?<=error\: )(.*)(?=\; Request)/', $message);`
对我来说似乎没问题。检查 $message 是否与该正则表达式没有任何转义或不同。
$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);
回馈:
int(1)
我认为您的问题不在于您的正则表达式本身,请注意;
并且:
不需要转义。但是我建议你使用这个:
if (preg_match('~error: \K[^;]++(?=; Request)~', $message, $reason))
print_r($reason);
注意$reason在哪里