首页 > 解决方案 > PHP preg_match 函数未按预期工作

问题描述

我想从字符串中找到模式的索引,并找到所有 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";
}

谢谢。

标签: phpregex

解决方案


您的代码有几个问题。

  1. 如果您对模式使用单引号并希望匹配文字反斜杠,则至少需要使用\\\甚至\\\\生成转义的反斜杠\\。如果不确定,只需呼应您的模式。

  2. 而不是使用PHP 中不可用的全局标志 使用. 如果匹配,则返回匹配数。您可以通过...检查匹配条件gpreg_match_allpreg_match_all() > 0

  3. 不确定^[\\^]. 如果您不需要它,请放下它。进一步[0-9]可以简化为\d。如果不应该匹配类似的东西,我也会在之后添加一个单词边界。\b\d{4}\u12345

在 tio.run 上查看这个 PHP 演示

$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";
}

推荐阅读