1

我在这里需要正则表达式方面的帮助。

我希望 PHP 能够将字符串拆分为数组的各个部分,以便由 <%me %> 包围的子字符串将位于其自己的插槽中。

例如,

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 回答