PHP preg_match函数未按预期工作

PHP preg_match函数未按预期工作,php,regex,Php,Regex,我想从字符串中查找模式的索引,并查找所有Unicode字符,如“\u2026”、“\u2021”、“\u2011”等 下面是我当前使用的代码片段。但这导致了另一种情况 if(preg_match('/[\\^]u[0-9]{4}/gi',$data['title'],$matches,PREG_OFFSET_CAPTURE)){ print_r($matches); } else{ echo "Not Found"; } 谢谢。您的代码有几个问题 如果您正在为模式使用单引号

我想从字符串中查找模式的索引,并查找所有Unicode字符,如“\u2026”、“\u2021”、“\u2011”等

下面是我当前使用的代码片段。但这导致了另一种情况

if(preg_match('/[\\^]u[0-9]{4}/gi',$data['title'],$matches,PREG_OFFSET_CAPTURE)){
     print_r($matches);
}
else{
     echo "Not Found";
}

谢谢。

您的代码有几个问题

  • 如果您正在为模式使用单引号,并且希望使用单引号,则至少需要使用
    \\\\\
    甚至
    \\\\\\\
    来生成转义反斜杠
    \\
    。如果不确定,只需重复你的模式即可

  • 而不是使用全局标志
    g
    ,这在PHP使用中不可用。如果匹配,则返回匹配数。您可以通过
    preg\u match\u all(
    )>0

  • [\\^]
    中的
    ^
    不确定。如果你不需要,放下它。进一步的
    [0-9]
    可以减少到
    \d
    。如果像
    \u12345
    这样的内容不匹配,我也会在
    \d{4}
    之后添加一个


  • 您希望哪种输出?显示文本输入。请注意,
    g
    标志不受支持,您需要使用
    preg\u match\u all
    谢谢,@WiktorStribiżew建议preg\u match\u all,使用该模式和修改后的模式即可!!为什么要投否决票?
    $pattern = '/\\\u\d{4}\b/i';
    # echo $pattern;
    
    if(preg_match_all($pattern, $data['title'], $matches, PREG_OFFSET_CAPTURE) > 0){
      print_r($matches[0]);
    } else{
      echo "Not Found";
    }