我有一个字符串,例如HRJSHR
并搜索查找A-Z
的所有可能排列的方法,其长度为2个或更多字母。例如
|[A-Z]{2,}|
只返回整个字符串“HRJSHR”和|[A-Z]{2}|
只返回2个字母的长度。 |[A-Z]{2+}|
不起作用。
哪个正则表达式会找到A-Z的所有排列,字符串中的字母长度为2个以上?
答案 0 :(得分:3)
可以在lookahead内捕获:(?=([A-Z]{2}))
会匹配由两个[A-Z]
组成的所有子字符串,例如HR
,RJ
,JS
, SH
,HR
。请参阅test at regex101。
将它与循环结合以获得所需的结果:
$str = "HRJSHR"; $res = array();
for($i=2; preg_match_all('/(?=([A-Z]{'.$i.'}))/', $str, $out); $i++)
$res[$i] = $out[1];
print_r($res);
请参阅test at 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];