Die Verwendung von Regex wird nur dazu dienen, den Prozess zu verlangsamen.
ich eine Funktion auf der Grundlage der powerSet()
Funktion von Yada @https://stackoverflow.com/a/27968556/2943403 geschrieben geschrieben haben)
Code: (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);
Ausgang:
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',
Hier ist ein Beitrag von bob at math.stackexchange, die bestätigt, dass 13699
die erwartete Größe des zurückgegebenen Arrays ist, wennangegeben wirdWörter in der Eingabezeichenfolge. Darüber hinaus sollte Bobs Zusammenbruch als Warnung dafür dienen, wie die Permutationen ziemlich schnell ansteigen - seien Sie vorsichtig mit Ihren großen Saiten.
Also, was Sie wollen, ist das Powerset der Wörter der Zeichenfolge richtig? Sie können dies anpassen [Antwort] (http://stackoverflow.com/questions/6092781/finding-the-subsets-of-an-array-in-php) – Richard
Ich möchte nur regulären Ausdruck –
Oh, richtig, habe ich diesen Teil übersprungen der Frage tut mir leid. Nun, regulärer Ausdruck soll Elemente von Strings zuordnen, nicht um einen Satz zu bilden. Sie können Regex verwenden, um Ihre Zeichenfolge zu teilen, aber letztendlich benötigen Sie mehr Code, um Ihr Ziel zu erreichen. – Richard