在 php 中使用正则表达式进行排列
permutation using regular expression in php
在 php.
中,是否有任何方法可以仅使用正则表达式来获得字符串中所有单词的排列
例如:
对于像 "How to remove pain in human knee"
这样的输入
我希望输出为:
"How To"、"How"、"pain knee"、"remove knee"、"knee pain"、"in remove"、"human pain knee"等
使用正则表达式只会减慢进程。
我已经根据 Yada @ )powerSet()
编写的 post 函数编写了一个函数
代码:(Demo)
function permStacker($array){
$stack=[[]]; // declare intitial empty element
foreach($array as $element){
foreach($stack as $combination){
foreach(array_diff($array,$combination) as $left){
$merge=array_merge($combination,[$left]);
$stack[implode(' ',$merge)]=$merge; // keys hold desired strings, values hold subarray of combinations for iterated referencing
}
}
}
unset($stack[0]); // remove initial empty element
return array_keys($stack); // return array of permutations as space delimited strings
}
$string='How to remove pain in human knee';
$permutations=permStacker(explode(' ',$string));
echo 'Total Permutations: ',sizeof($permutations),"\n";
var_export($permutations);
输出:
Total Permutations: 13699
array (
0 => 'How',
1 => 'to',
2 => 'remove',
3 => 'pain',
4 => 'in',
5 => 'human',
6 => 'knee',
7 => 'How to',
8 => 'How remove',
9 => 'How pain',
10 => 'How in',
11 => 'How human',
12 => 'How knee',
13 => 'to How',
14 => 'to remove',
15 => 'to pain',
16 => 'to in',
17 => 'to human',
18 => 'to knee',
19 => 'remove How',
20 => 'remove to',
21 => 'remove pain',
22 => 'remove in',
23 => 'remove human',
24 => 'remove knee',
25 => 'pain How',
26 => 'pain to',
27 => 'pain remove',
28 => 'pain in',
29 => 'pain human',
30 => 'pain knee',
31 => 'in How',
32 => 'in to',
33 => 'in remove',
34 => 'in pain',
35 => 'in human',
36 => 'in knee',
37 => 'human How',
38 => 'human to',
39 => 'human remove',
40 => 'human pain',
41 => 'human in',
42 => 'human knee',
43 => 'knee How',
44 => 'knee to',
45 => 'knee remove',
46 => 'knee pain',
47 => 'knee in',
48 => 'knee human',
49 => 'How to remove',
50 => 'How to pain',
51 => 'How to in',
这是 bob at math.stackexchange 的 post,它确认当输入字符串中给定 7
个单词时,13699
是返回数组的预期大小。此外,bob 的分解应该作为排列如何快速上升的警告——小心你的大字符串。
在 php.
中,是否有任何方法可以仅使用正则表达式来获得字符串中所有单词的排列例如:
对于像 "How to remove pain in human knee"
这样的输入我希望输出为:
"How To"、"How"、"pain knee"、"remove knee"、"knee pain"、"in remove"、"human pain knee"等
使用正则表达式只会减慢进程。
我已经根据 Yada @ )powerSet()
编写的 post 函数编写了一个函数
代码:(Demo)
function permStacker($array){
$stack=[[]]; // declare intitial empty element
foreach($array as $element){
foreach($stack as $combination){
foreach(array_diff($array,$combination) as $left){
$merge=array_merge($combination,[$left]);
$stack[implode(' ',$merge)]=$merge; // keys hold desired strings, values hold subarray of combinations for iterated referencing
}
}
}
unset($stack[0]); // remove initial empty element
return array_keys($stack); // return array of permutations as space delimited strings
}
$string='How to remove pain in human knee';
$permutations=permStacker(explode(' ',$string));
echo 'Total Permutations: ',sizeof($permutations),"\n";
var_export($permutations);
输出:
Total Permutations: 13699
array (
0 => 'How',
1 => 'to',
2 => 'remove',
3 => 'pain',
4 => 'in',
5 => 'human',
6 => 'knee',
7 => 'How to',
8 => 'How remove',
9 => 'How pain',
10 => 'How in',
11 => 'How human',
12 => 'How knee',
13 => 'to How',
14 => 'to remove',
15 => 'to pain',
16 => 'to in',
17 => 'to human',
18 => 'to knee',
19 => 'remove How',
20 => 'remove to',
21 => 'remove pain',
22 => 'remove in',
23 => 'remove human',
24 => 'remove knee',
25 => 'pain How',
26 => 'pain to',
27 => 'pain remove',
28 => 'pain in',
29 => 'pain human',
30 => 'pain knee',
31 => 'in How',
32 => 'in to',
33 => 'in remove',
34 => 'in pain',
35 => 'in human',
36 => 'in knee',
37 => 'human How',
38 => 'human to',
39 => 'human remove',
40 => 'human pain',
41 => 'human in',
42 => 'human knee',
43 => 'knee How',
44 => 'knee to',
45 => 'knee remove',
46 => 'knee pain',
47 => 'knee in',
48 => 'knee human',
49 => 'How to remove',
50 => 'How to pain',
51 => 'How to in',
这是 bob at math.stackexchange 的 post,它确认当输入字符串中给定 7
个单词时,13699
是返回数组的预期大小。此外,bob 的分解应该作为排列如何快速上升的警告——小心你的大字符串。