【问题标题】:PHP: preg_splitPHP: preg_split
【发布时间】:2010-07-23 18:57:59
【问题描述】:

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

我希望 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"}

请注意,空格不会阻止标签被解析。

【问题讨论】:

  • 你的例子没有意义。 ; 来自哪里? "&lt;%me date(); %&gt;}, 是什么意思?缺少一些双引号!缺少一些结束卷曲!请为所有相关人员的利益进行修复。
  • 标签部分也可以包含%吗?
  • 很好 preg_split 应该将字符串术语到给定正则表达式模式的数组中。所以我需要将字符串转换为它右侧的数组的正则表达式。抱歉,这是我的错误,但每个 date() 末尾应该有分号。

标签: php regex preg-split


【解决方案1】:

关于捕获PREG 中的拆分分隔符

您可以使用PREG_SPLIT_DELIM_CAPTURE 分割并捕获分隔符。

请记住将分隔符放入捕获组(…) 以使其正常工作。

这是一个例子:

$text = 'abc123xyz456pqr';

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

print_r($parts);

这会打印 (as seen on ideone.com):

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

参考文献


回到问题

在这种情况下,您可以尝试使用分隔符模式(&lt;%me[^%]+%&gt;)。那就是:

  • &lt;%me,字面意思
  • [^%]+,即除了%之外的任何东西
  • %&gt;,字面意思
  • 在第 1 组中捕获了整个东西

如果%可以出现在标签中,那么你可以试试(&lt;%me.*?%&gt;)之类的东西。

这是一个例子:

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

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

print_r($parts);

以上打印(as seen on ideone.com):

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

相关问题

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多