例A[簡略化されたもの]:------------------------------------------ --------------------------
モデル:文字列{1}と{2}のkeeeeeepとoooon .. ..
CASE_A:2つの単語とoooonに文字列helloとkeeeeeep ...
CASE_B:何か他のものをひもでつなぎ、楽しみのためだけにキープしてください...
、、 ...というn個の変数とそれぞれの一致する値のリストを取得する必要があります。編集:変数名はプレースホルダーに応じて指定されることに注意してください。プレースホルダーは常にINTです。(数字は単語数ではなく単なるインデックスです)ケースAの場合
:= hello = 2ワード=など...ケースB
の場合:=その他=楽しみのためだけ=など...
これらの値を取得するための参照を見ることができます両方の文字列の「定数」部分です。$v1
$v2
$vn
$v1
$v2
$vn
$v1
$v2
$vn
例B[ほぼ本物の]:---------------------------------------- ----------------------------
ここで、次のように、可能な一致がそれぞれ配列に保存されていると仮定します(実際の場合は長いデータベースです)。possible_matches {
[0] string three <<<<
[1] Oneword <<<<
[2]その他
[3 ]ハリーポップポッター
[4] 2つの言葉<<<<
[5]魔法の言葉魔法の気持ち
}
前の例では、各{n}「プレースホルダー」が「定数」文字列で区切られているため、これは必要ありませんでした。しかし、これらの「プレースホルダー」が一緒になっている場合があります...したがって、可能な一致に一致する新しい方法を発明する必要があります(固定リスト)。
文字列{1}と{2} {3}とoooon..のkeeeeeep
String Oneword and keeeeeep on two words string three and oooon .. ..
ご覧のとおり(上記の配列に基づく)、結果は次のようになります。
$v1
= hello
$v2
= 2ワード
$v3
=文字列3
しかし、PHPが文字列をどのように分離するかをどのように知っているのでしょうか?
私の考えは次のことです:
1){2}{3}ブロックを単一のブロックとして取得します。2)このブロック(2ワードと3ワード)が
正しいかどうか配列をチェックインします
。3)そうでない場合:
4)最後のワードを削除します
。5)新しいブロック(2ワードと3ワード)でもう一度チェックします。
6)そうでない場合:
<<<<
4')最後の単語を削除します
5')新しい単語でもう一度確認しますin_array()
(2つの単語と)。
4'')最後の単語を削除します
5'')新しい(2単語)でもう一度確認します。
<<<< 7)一致する可能性
のある
ものが1つになるまで4と5を繰り返します()
8)一致したものは{2}になり、残りの文字列は{3}になります私の質問:PHPでこれを作成するにはどうすればよいですか?
私はそれを私ができる限り簡単に説明しようとしました、そしてあなたが私が求めようとしていることを理解してくれることを願っています。誰かがもっと例を必要とするならば、私はそれらを書き留めます、ただ私に知らせてください。読んでくれてありがとう。編集 - - - - - - - - - - - - - - - - - - - - - - - - - -------------------実際の例:
配列:possible_matchesin_array()
{
[0]クリストファージョンソン
[1]マッキャンドレス
[2]シネマ
[3]明日の夜
}
モデル:私の名前は{1} {2}で、 {3}{4}に行きます
ケース:私の名前はクリストファー・ジョンソン・ マッキャンドレスです。明日夜に映画館に行きます。
望ましい結果:
$v1
= Christopher Johnson
$v2
= McCandless
$v3
= Cinema
$v4
=明日の夜
可能な組み合わせの配列を作成する
function get_possible_groups($string_of_words, $groups_count){
$words=explode(' ',$string_of_words);
$total=count($words);
$group_1=array(array());
$group_2=array(array());
//We can create TOTAL-1 combinations
for($i=0;$i<$total;$i++){
$lim=$total-$i-1;
for($j=0;$j<$total;$j++){
if($j<$lim){
$group_1[$i][]=$words[$j];
}else{
$group_2[$i][]=$words[$j];
}
}
}
return array($group_1,$group_2);
}
承認された回答のコメントで参照されている更新
$model="Damn you {1}, {2} will kill you. {3}{4}{5}";
//Array => Save how many single placeholders are in each "placeholder block"
$placeholder_count{
[0]=1, //first block contains one placeholder
[1]=1, //second block contains one placeholder
[2]=3 //third block contains three placeholders
}
//Simplify all blocks into ONE SINGLE regex placeholder
$pattern="/Damn you (.*), (.*) will kill you. (.*)/";
//Match in string
$string="Damn you Spar, Will will kill you. I Love it man.";
preg_match($pattern,$string,$matches);
//View in array which placeholders have to be checked
$block_0=$matches[1]; //Array shows it was 1 p.holder. No check needed
$block_1=$matches[2]; //Array shows it was 1 p.holder. No check needed
$block_2=$matches[3]; //It shows it were 3 p.holders. Possible grouping (n=3)
//Result
$v1=$matches[1];
$v2=$matches[2];
$v3,$v4,$v5=(Result of grouping and querying the $matches[3] with groups_count=3)