Php preg_match()匹配一种模式的案例?

Php preg_match()匹配一种模式的案例?,php,regex,preg-match,Php,Regex,Preg Match,根据数组的每个部分从使用preg_match()开始的内容,我如何将1个数组排序为2个数组 我知道如何使用1个表达式,但我不知道如何使用2个表达式。 到目前为止,我可以做到(不要问我为什么不使用strps()-我需要使用正则表达式): 所以我的问题是:是否可以使用1 preg_match()函数来实现这一点? 请忽略数组中的SOMETHING部分,这表明仅使用一个if-else语句无法解决此问题 谢谢。您可以在第三个参数中使用一个替代项来进行preg_match,它包含匹配的regexp部分 p

根据数组的每个部分从使用preg_match()开始的内容,我如何将1个数组排序为2个数组

我知道如何使用1个表达式,但我不知道如何使用2个表达式。 到目前为止,我可以做到(不要问我为什么不使用strps()-我需要使用正则表达式):

所以我的问题是:是否可以使用1 preg_match()函数来实现这一点? 请忽略数组中的SOMETHING部分,这表明仅使用一个if-else语句无法解决此问题


谢谢。

您可以在第三个参数中使用一个替代项来进行
preg_match
,它包含匹配的regexp部分

preg_match('/^(?:F|BBC)/', $part, $match);
switch ($match) {
case 'F':
    $f[] = $part;
    break;
case 'BBC':
    $bbc[] = $part;
    break;
default:
    // Not F or BBC
}

您可以将替换项与第三个参数一起用于
preg_match
,其中包含匹配的regexp部分

preg_match('/^(?:F|BBC)/', $part, $match);
switch ($match) {
case 'F':
    $f[] = $part;
    break;
case 'BBC':
    $bbc[] = $part;
    break;
default:
    // Not F or BBC
}

甚至可以不使用任何循环、开关或其他任何东西(比公认答案的解决方案更快、更有效)


正则表达式很好,但它不是万能的。

甚至可以不使用任何循环、开关或其他任何东西(比公认答案的解决方案更快、更有效)


正则表达式很好,但不是万能的。

使用一个函数返回F、BBC或两者都不返回,然后与that@Mouser-如果这样做,我将如何确定是否将值推入数组?它返回布尔值还是什么?@user3530525
/^(F)|(BBC)
/将找到匹配项
preg_match
有第三个参数,名为
$matches
。这将返回所创建的结果。您可以使用if/else将内容推送到正确的数组中。使用一个函数返回F、BBC或两者都不返回,然后与that@Mouser-如果这样做,我将如何确定是否将值推入数组?它返回布尔值还是什么?@user3530525
/^(F)|(BBC)
/将找到匹配项
preg_match
有第三个参数,名为
$matches
。这将返回所创建的结果。您可以使用if/else将内容推送到正确的数组中。非常感谢!效果很好。我在我的foreach循环中使用了它,匹配变成了一个数组,所以我只做了$match[0],它可以完美地工作!非常感谢:)非常感谢!效果很好。我在我的foreach循环中使用了它,匹配变成了一个数组,所以我只做了$match[0],它可以完美地工作!非常感谢:)
<?php

preg_match_all("/(?:(^F.*$)|(^BBC.*$))/m", implode(PHP_EOL, $gen), $matches);

$f = isset($matches[1]) ? $matches[1] : array();
$bbc = isset($matches[2]) ? $matches[2] : array();
<?php

$c = count($gen);
$f = $bbc = array();
for ($i = 0; $i < $c; ++$i) {
  if (strpos($gen[$i], "F") === 0) {
    $f[] = $gen[$i];
  }
  elseif (strpos($gen[$i], "BBC") === 0) {
    $bbc[] = $gen[$i];
  }
}