PHP正则表达式排列

tihox1

我有一个字符串,例如,HRJSHR并寻找一种方法来查找A-Z长度为2个或更多字母的所有可能排列例如

  • 人力资源,RJ,JS,SH,HR
  • HRJ,RJS,JSH,SHR
  • HRJS,RJSH,JSHR
  • HRJSH,RJSHR
  • 人力资源部

|[A-Z]{2,}|只返回整个字符串“ HRJSHR”,以及|[A-Z]{2}|仅包含2个字母的字符串|[A-Z]{2+}|不起作用。

哪个正则表达式会找到字符串中长度为2个或更多字母的AZ的所有排列?

强尼5

一个内可以捕捉前瞻(?=([A-Z]{2}))会匹配所有两个组成子[A-Z]HRRJJSSHHR参见regex101的测试

在此处输入图片说明

将其与循环结合以获得所需的结果:

$str =  "HRJSHR"; $res = array();

for($i=2; preg_match_all('/(?=([A-Z]{'.$i.'}))/', $str, $out); $i++)
  $res[$i] = $out[1];

print_r($res);

参见eval.in的测试输出到

Array
(
    [2] => Array
        (
            [0] => HR
            [1] => RJ
            [2] => JS
            [3] => SH
            [4] => HR
        )

    [3] => Array
        (
            [0] => HRJ
            [1] => RJS
            [2] => JSH
            [3] => SHR
        )

    [4] => Array
        (
            [0] => HRJS
            [1] => RJSH
            [2] => JSHR
        )

    [5] => Array
        (
            [0] => HRJSH
            [1] => RJSHR
        )

    [6] => Array
        (
            [0] => HRJSHR
        )

)

对于不按长度分组的结果,请使用:
$res = array_merge($res, $out[1]);而不是$res[$i] = $out[1];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章