使用php负面的正则表达式问题看看斜杠

时间:2016-12-20 17:01:59

标签: php regex

使用带有斜杠的有效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在正则表达式断言中改变了一些东西?

1 个答案:

答案 0 :(得分:1)

你的问题是:

你有:

(\w*?)=\"(.*?)(?<!\)(\")

正确的是:

(\w*?)=\"(.*?)(?<!)(\")

注意:(?<!\)该斜杠正在逃避),因此它不会被理解为)

编辑: 我已经了解到PHP需要注意转义字符串中的反斜杠,请参阅本手册页面顶部的注释:http://de.php.net/manual/en/regexp.reference.escape.php

因此,要正确地转义斜杠,您的代码应使用单引号:

preg_match_all('/(\w*?)=\"(.*?)(?<!\\\\)(\")/sm', $str, $matches);