【问题标题】:PHP : simple regex problemPHP:简单的正则表达式问题
【发布时间】:2011-09-12 08:43:17
【问题描述】:

我的一些 HTML 文件包含如下字符串:

{foreach $any_kind_of_charaters}
Any kind of string including "\n\r" and spaces here
{/foreach}

我想在他们身上应用PHP's preg_match_all,并想返回一个漂亮的array,如下所示

Array
(
    [0] => {foreach $any_kind_of_charaters}
            Any kind of string including "\n\r" and spaces here
           {/foreach}
    [1] => any_kind_of_charaters
    [2] => Any kind of string including "\n\r" and spaces here
)

这个正则表达式:/\{foreach\s+\$(.*)\}\s+(.*)\s+\{\/foreach\}/ 对我来说没问题,
但是当我在{foreach}{/foreach} 标签之间添加新行(\n)时它失败了。

非常感谢您的帮助,谢谢。

使用“S”修饰符后的数组

Array
(
    [0] => {foreach $any_kind_of_charaters}
        Any kind of string including "\n\r" and spaces here
        {/foreach}
    [1] => any_kind_of_charaters}
        Any kind of string including "\n\r" and spaces here
    [2] => 
)

array 中的second key 包含不必要的数据,而array 中的last key 完全是空的。

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    在正则表达式上设置 s 修饰符标志。

    http://php.net/manual/en/reference.pcre.pattern.modifiers.php


    像这样:/\{foreach\s+\$(.*)\}\s+(.*)\s+\{\/foreach\}/s

    【讨论】:

    • 尝试删除\s,因为现在一个点也会匹配它。也可以试试m 修饰符。
    • 没有m修饰符的运气,将\s替换为.后数组变得更丑
    猜你喜欢
    • 2011-02-09
    • 2023-03-31
    • 1970-01-01
    • 2011-05-13
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多