PHP正则表达式置换

PHP正则表达式置换,php,regex,Php,Regex,我有一个字符串,例如HRJSHR,并搜索一种方法来查找长度为2个或更多字母的a-Z的所有可能排列。比如说 人力资源,RJ,JS,SH,人力资源 HRJ、RJS、JSH、SHR HRJS,RJSH,JSHR HRJSH,RJSHR HRJSHR |[A-Z]{2,}{code>只返回整个字符串“HRJSHR”,而|[A-Z]{2}}只返回长度为2个字母的字符串|[A-Z]{2+}不起作用 哪个正则表达式会在字符串中找到长度为2个或更多字母的A-Z的所有排列?可以在A内捕获:(?=([A-Z]{

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

  • 人力资源,RJ,JS,SH,人力资源
  • HRJ、RJS、JSH、SHR
  • HRJS,RJSH,JSHR
  • HRJSH,RJSHR
  • HRJSHR
|[A-Z]{2,}{code>只返回整个字符串“HRJSHR”,而
|[A-Z]{2}}
只返回长度为2个字母的字符串<代码>|[A-Z]{2+}
不起作用

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

可以在A内捕获:
(?=([A-Z]{2}))
将匹配由两个
[A-Z]
组成的所有子字符串,例如
HR
RJ
JS
SH
HR
。看

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

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

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

print_r($res);
见,输出至:

对于不按长度分组的结果,请使用:

$res=array\u merge($res,$out[1])
而不是
$res[$i]=$out[1]

IMHO使用单个正则表达式是不可能的。您必须从2循环到字符串的长度。您可以检查:您是否使用preg_match_all?或者仅仅是预赛?投票支持重新开赛,因为我理解了这个问题,OP想从
ABC
BC
ABC
而不是
AB
BC
AC
CB
CA
BA
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
        )

)