如何检测字符串行中预期的不正确字符串

How do detect an expected incorrect string in a string line

我有一个大字符串示例

newboay1fineboy8badboiy12 boy4andothersfollows...

我的问题是如何从每个字符串行输出示例中检测到不正确的男孩我的预期输出应该是这样的: boay1 boiy12 这是我试过的代码:

$string = "newboay1fineboy8badboiy12 boy4andothersfollows...";
$string = preg_match_all("/bo\d+/", $string, $results);
foreach($results[0] as $val){
    if($val !== boy) {
        echo $val;
    }

但我在 return 中没有得到任何输出。 非常感谢您的时间和对我的解决方案的影响

您可以按如下方式修复您的代码:

$string = "newboay1fineboy8badboiy12 boy4andothersfollows...";
$string = preg_match_all("/(bo\pL+)\d+/", $string, $results,  PREG_SET_ORDER, 0);
foreach($results as $val){
    if($val[1] !== "boy") {
        echo $val[0] . "\n";
    }
}

参见PHP demo

重点是匹配bo,然后任意1+个字母和捕获那个部分,然后只匹配1+个数字。请参阅正则表达式 (demo):

'~(bo\pL+)\d+~'

详情

  • (bo\pL+) - 第 1 组:bo 和 1+ 个字母
  • \d+ - 1+ 位数。

foreach中,$val[1]包含捕获到第1组的值,如果不等于boy,你可能会得到整个匹配访问$val[0] 在你的 if 语句中。