我有一个字符串,例如
HRJSHR
并寻找一种方法来找到长度为 2 个或更多字母的 A-Z
的所有可能排列。例如
|[A-Z]{2,}|
仅返回整个字符串“HRJSHR”,|[A-Z]{2}|
仅返回长度为2个字母的字符串。 |[A-Z]{2+}|
不起作用。
哪个正则表达式可以找到字符串中长度为 2 个或更多字母的 A-Z 的所有排列?
可以在 lookahead 中捕获:
(?=([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];