0

{{esc}}"Content"{{/esc}} ... {{esc}}"More content"{{/esc}}たとえば、出力したい文字列を指定すると、文字\"Content\" ... \"More content\"列内の引用符をエスケープしようとしています。(ただし、これは不自然な例であるため、「このライブラリを使用して実行してください」などの回答は役に立ちません。)

これが私の現在の解決策です:

return preg_replace_callback(
  '/{{esc}}(.*?){{\/esc}}/', 
  function($m) {
    return str_replace('"', '\\"', $m[1]);
  },
  $text
);

ご覧のとおり、次のように表示されるため、 と言う必要があります$m[1]print_r$m

Array 
(
    [0] => {{esc}}"Content"{{/esc}}
    [1] => "Content"
)

または、2 番目の一致の場合、

Array 
(
    [0] => {{esc}}"More content"{{/esc}}
    [1] => "More content"
)

私の質問は、なぜ私の正規表現が$m配列になるのですか? $m[1]結果を単一の変数として取得する方法はあります$mか?

4

2 に答える 2

0

正規表現は文字列と一致し、結果を配列に入れます。一致する場合、最初のインデックスは一致する文字列全体を格納し、配列の残りの要素はキャプチャされた文字列です。

preg_replace_callback()次のように動作しpreg_match()ます。

 $result = array();
 preg_match('/{{esc}}(.*?){{\/esc}}/', $input_str, $result);

 // $result will be an array if match.
于 2013-09-25T06:21:11.893 に答える
0

(.*?)ジャックの助けを借りて、srain がこの点を明確にしていないので、私はここで自分の質問に答えました実際、この部分式に一致する文字列を他の方法で抽出する便利な方法はないようです。

于 2013-09-25T06:34:28.017 に答える