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
)
)