2012-01-14 6 views
-1

F($input)という名前の関数があり、1つのファイルで定義されているとします。内容を変更せずに部分文字列を文字列にマーキングする

私はそのソースが何であるかわからない、それは私がファイルの内容を見ることができない。私は入力された文字列で関数Fを呼び出すだけで、関数は自分の入力からなる文字列を1回以上返します。

私は、入力文字列があればそれを返し値で認識したいと思う。

function F($input){ 
    return 'foo'.$input.'bar'; 
} 

をし、私はF('bar')を呼び出し、この戻りfoobarbar:例えば

は、関数Fは以下であると仮定します。 これで、どの部分文字列が入力パラメータbarであるか分かりません。最初にbarまたは2番目? Fに送信する前に入力文字列のすべての文字をマークし、F内のすべての操作をマークした文字を維持する方法[たとえば]を探しています。最終的に返されるFの値は、例えばfoo*bar*barであり、最初にbarが区別されます。

注:マークは文字列の内容を変更してはなりません。つまり、マークされた$入力の場合、($input=='bar')はfalseを返さないでください。

+0

'F(' * '。$ input。' * '); '、いいえ、行えません。文字列は_simple_型です。 – Wrikken

+0

こんにちは。余分な属性が付加されていない限りそうではない。 –

+0

は、不明瞭な意図、downvoteと非常に混同しているようです。 – Eddie

答えて

1

文字列ではなくデコレータを返すことができます。オブジェクトには追加のマークアップが含まれ、文字列の位置を知ることができます。 __toString()をオーバーライドすると、通常の文字列を返すことができ、ほとんどの操作が機能し続けるはずです。

class SubstringPositionDecorator 
{ 
    private $string; 
    private $start; 
    private $length; 

    function __construct($string, $start, $length) 
    { 
     $this->string = $string; 
     $this->start = $start; 
     $this->length = $length; 
    } 

    function __toString() 
    { 
     return $this->string; 
    } 

    // Additional functions to access the substring information 
} 

function F($input) 
{ 
    // Find string position... 

    return new SubstringPositionDecorator('foo' . $input . 'bar', 3, 3); 
} 

$annotedString = F('bar'); 
+0

私の例Fと 'bar'ではどのように動作するのでしょうか。 – ahoo

+0

コードを更新しました。私はより明確になるだろうが、あなたはあなたの質問も明確にする必要がある。ありがとうございますが、ファイルの内容を変更してください。 –

+0

私は関数 'F'のコードを変更したくありません。 – ahoo

関連する問題