我有一个字符串,例如,HRJSHR
并寻找一种方法来查找A-Z
长度为2个或更多字母的所有可能排列。例如
|[A-Z]{2,}|
只返回整个字符串“ HRJSHR”,以及|[A-Z]{2}|
仅包含2个字母的字符串。|[A-Z]{2+}|
不起作用。
哪个正则表达式会找到字符串中长度为2个或更多字母的AZ的所有排列?
一个内可以捕捉前瞻:(?=([A-Z]{2}))
会匹配所有两个组成子[A-Z]
如HR
,RJ
,JS
,SH
,HR
。参见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] 删除。
我来说两句