1

ここで正規表現の助けが必要です。

<%me%>で囲まれた部分文字列が独自のスロットに入るように、PHPが配列のセクションで文字列を分割できるようにしたい。

たとえば、

Hi there how are <%me date(); %> => {"Hi there how are ", "<%me date(); %>} 
Hi there how are you<%me date(); %> => {"Hi there how are you", "<%me date(); %>}
Hi there how are you<%me date(); %>goood => {"Hi there how are you", "<%me date(); %>, "good"
Hi there how are you<%me date(); %> good => {"Hi there how are you", "<%me date(); %>}, " good"}

空白はタグの解析を停止しないことに注意してください。

4

1 に答える 1

3

分割区切り文字のキャプチャについてPREG

PREG_SPLIT_DELIM_CAPTURE区切り文字を分割してキャプチャするために使用できます。

(…)これが正しく機能するように、区切り文字をキャプチャ グループに入れることを忘れないでください。

次に例を示します。

$text = 'abc123xyz456pqr';

$parts = preg_split('/(\d+)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

print_r($parts);

これは出力します ( ideone.com で見られるように):

Array
(
    [0] => abc
    [1] => 123
    [2] => xyz
    [3] => 456
    [4] => pqr
)

参考文献


質問に戻る

この場合、区切りパターンを試すことができます(<%me[^%]+%>)。あれは:

  • <%me、 文字通り
  • [^%]+、すなわちそれ以外%
  • %>、 文字通り
  • グループ 1 でキャプチャされた全体

%タグに表示できる場合は、 のようなものを試すことができます(<%me.*?%>)

次に例を示します。

$text = 'prefix<%me date() %>suffix';

$parts = preg_split('/(<%me[^%]+%>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

print_r($parts);

上記の出力 ( ideone.com で見られるように):

Array
(
    [0] => prefix
    [1] => <%me date() %>
    [2] => suffix
)

関連する質問

于 2010-07-23T19:24:12.867 に答える