2012-04-22 17 views
0

文字列を解析しようとしています。キャッチは、文字列内の各変数が複数回出現する可能性があるため、繰り返し発生するそれぞれを一意の置換で置き換える必要があります。文字列解析 - 繰り返し実行される部分文字列を一意の置換文字で置き換えます。

$string = "$Pronoun $Adjective $Noun is as $Adjective as an $Adjective $Noun"

私は、これは「$Pronoun」の各出現は、私のgetRandomWordByType('Pronoun')メソッドへの単一の呼び出しから取得した同じ代名詞に置き換えますという事実から離れて働くstr_replace("$Pronoun", getRandomWordByType('Pronoun'), $string)

を試してみました。

私の目標は...タイプによって分類された単語のデータベースから取得した言葉で、プレースホルダを交換し、動的に面白い文章を構築するために任意の提案を事前に

感謝です:)

+0

これを解決するには、何が目的であり、どのリソースが利用可能であるかなど、より多くのドメイン知識が必要です。そうでなければ、これは単なる論理プログラミングであり、プログラマがルールを作成する必要があり、プログラムはそれらのルールを使ってそれらの文を作成する必要があります。ルールによって私は制約などを意味する – doNotCheckMyBlog

答えて

1

はこれを試してみてください:

preg_replace_callback("(\$([a-z]+))i",function($a) {return getRandomWordByType($a[1]);},$string); 

これは自動的にgetRandomWordByType機能にSomethingを渡すことによって、フォーム$Somethingのいずれかのキーワードを変換します。別の利点は、ランダムワード関数が各ワードに対して1回呼び出されることである。それが有効なリストでキーワードを見つけることができない場合は不慮の置換を防ぐため

は、たとえば$NotAKeywordのために、($keywordは関数の引数である)getRandomWordByTypeリターン'$'.$keywordを持っています。

+0

治療を働かせてくれた素晴らしい感謝。 正規表現のパターンを少し修正して、 '| \ $([a-z] +)| i' ありがとう! –

関連する問題