使用带有斜杠的有效lookbehind
时,我总是会遇到此错误警告:preg_match_all():编译失败:缺少)at 第 6 行 [...] [...] 中的偏移22
这很奇怪,因为在phplive正则表达式上它完美http://www.phpliveregex.com/p/iiM但不在php 7 localhost上
代码是
<?php
$str = '[dzspgb_element text="<p><iframe src=\"https:/www.facebook.com/plugins/th=\"250\" height=\"500\" none=\"\" " kill_tinymce="on" type_element="text"][/dzspgb_element]';
preg_match_all("/(\w*?)=\"(.*?)(?<!\\)(\")/sm", $str, $matches);
print_r($matches);
您可以在此处进行测试 - http://sandbox.onlinephpfunctions.com/
知道出了什么问题吗?也许php 7在正则表达式断言中改变了一些东西?
答案 0 :(得分:1)
你的问题是:
你有:
(\w*?)=\"(.*?)(?<!\)(\")
正确的是:
(\w*?)=\"(.*?)(?<!)(\")
注意:(?<!\)
该斜杠正在逃避)
,因此它不会被理解为)
编辑: 我已经了解到PHP需要注意转义字符串中的反斜杠,请参阅本手册页面顶部的注释:http://de.php.net/manual/en/regexp.reference.escape.php
因此,要正确地转义斜杠,您的代码应使用单引号:
preg_match_all('/(\w*?)=\"(.*?)(?<!\\\\)(\")/sm', $str, $matches);