2016-05-03 12 views
1

phpの正規表現だけを使用して文字列内のすべての単語を置換する方法はありますか?例えばPHPでの正規表現を使用した置換

入力のための私のように出力したい

「をどのように人間の膝の痛みを削除する」のように:

「どのように」、「どのように」、「痛みひざ」、 "膝を除去する"、 "膝を痛める"、 "除去する"、 "人間の痛みの膝"など

+0

だから、あなたが望むのは、文字列の単語のパワーセットです。あなたはこの[回答](http://stackoverflow.com/questions/6092781/finding-the-subsets-of-an-array-in-php) – Richard

+0

私は正規表現だけをしたい –

+3

ああ、私はその部分をスキップしました申し訳ありません。よくある正規表現は、文字列の要素にマッチするものであり、セットを構築するものではありません。正規表現を使用して文字列を分割することはできますが、最終的に目標を達成するにはより多くのコードが必要になります。 – Richard

答えて

0

正規表現を使用すると処理が遅くなります。

I)はhttps://stackoverflow.com/a/27968556/2943403 @矢田によって投稿powerSet()機能に基づいて

コード機能を書かれている:(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これは、が与えられたときに返される配列の予想されるサイズであることを確認します入力文字列内の単語。さらに、ボブの故障は、パーミュテーションがどのように高速化するかについての警告として役立ちます。大きな文字列には注意してください。

+0

@AnkitAgarwal私の以前の方法が間違っていたことをお知らせする必要があります。プロジェクトの1つでそれを使用していた場合は、誤った結果が出されたときにすぐに機能を置き換えてください。私の新しい方法は正しいことが分かりました。私の間違いをおかけして申し訳ありません。 – mickmackusa

関連する問題