Php 正则表达式:未知修饰符'\';

Php 正则表达式:未知修饰符'\';,php,regex,preg-match,Php,Regex,Preg Match,我有以下正则表达式: (?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]

我有以下正则表达式:

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))
我试着像这样避开反斜杠:

(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))
(a)以下以下:::{{1,3}(a-0-0-0-10-9%[a-0-0-10-9%[a-0-0-0-10-10-9-9-9%[[a-a-a-a-a-a-z[[a-a-a-z[[[a-a-a-z[[[[[[a-a-a-z[[[[[[a-z[[[[[[a-a-a-z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[w-[w-[w-[w-[w-[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[^\\s`!()\\[\]{};:'\'',«»'''])) 没有任何运气。我还尝试用波浪线替换反斜杠,同样没有运气。我在互联网上搜索了关于“\”作为未知修饰语但又没有运气的任何细节。这里出了什么问题

应要求提供一个代码示例:

$regex = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))';
return !preg_match($regex, $url);
(2)以下两个:(:(1)a-z[[a-z[[[[w-[[w-[[[w-[[[[w-[[10:::[1,3}[a-z0-9-9-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-9-10-10-10-10-10-10-10-10-10-10-9-10-10-10-10-10-9-10-9-9-9-9-9-9-9%])))))))))))))政府当局的(((((()在上述上述上述上述上述上述人士人士人士人士,,,:::::::::::::::::::::::::::::::::::::::::::“[[[[[[[[[10.()\[\]{};:\'\',«»'''']); 回来!preg_match($regex,$url);
谢谢

只需使用如下反斜杠将单引号转义

$regex = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))';

您必须在正则表达式周围添加分隔符:

$regex = '~(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))~';
[代码><码码>>现时的政府监管局(“码码>>人士人士人士将把把他们的强强卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖!()\[\]{};:\'\',«»'''''))~; 作为分隔符,除了空格或单词字符外,几乎可以使用任何字符。
我建议您使用正则表达式中不存在的字符,这样您就不必转义它。

这里我使用的是
~

因为我缺少一个解释警告的答案,所以我添加了另一个

preg函数需要一个正则表达式分隔符,而您忘记显式地放置一个,因此正则表达式字符串中的第一个字符用作分隔符。由于它是一个开始括号,相应的分隔符是结束括号

$regex = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))';
          |  || 
          |  || first character after the closing delimiter is an unknown modifier ==> your warning !
          |  | first closing bracket is the other delimiter
          | first opening bracket is the delimiter
(2)以下两个:(:(1)a-z[[a-z[[[[w-[[w-[[[w-[[[[w-[[10:::[1,3}[a-z0-9-9-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-9-10-10-10-10-10-10-10-10-10-10-9-10-10-10-10-10-9-10-9-9-9-9-9-9-9%])))))))))))))政府当局的(((((()在上述上述上述上述上述上述人士人士人士人士,,,:::::::::::::::::::::::::::::::::::::::::::“[[[[[[[[[10.()\[\]{};:\'\',«»'''']); | || || |结束分隔符后的第一个字符是未知修饰符==>您的警告! ||第一个结束括号是另一个分隔符 |第一个左括号是分隔符 这是因为作为正则表达式分隔符,也可以使用一对括号


因此,解决方案是放置一个适当的正则表达式分隔符,就像这里的其他人向您展示的那样。

反斜杠用于转义特殊字符。你必须避开整个正则表达式才能正确使用它,Shankar Damodaran已经演示了如何使用它。你如何使用这个正则表达式?给我们看一些代码,我怀疑你没有使用分隔符。我已经添加了用法@M42。这个可能的重复似乎并不能解决问题。它仍然抛出一个未知的修饰语“\”警告。这成功了!我现在明白了。正则表达式有时对我来说似乎是个谜。@FabianPas,没错。这就是为什么我从来没有在这方面冒险过。我不知道你可以像这样定义自己的分隔符…@jacobtomason:你可以使用任何非字母数字、非反斜杠、非空白字符
$regex = '~(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))~';
$regex = '(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'\".,<>?«»“”‘’]))';
          |  || 
          |  || first character after the closing delimiter is an unknown modifier ==> your warning !
          |  | first closing bracket is the other delimiter
          | first opening bracket is the delimiter