【问题标题】:PHP Regex Match Multiple Occurrences in Multiple Lines StringPHP 正则表达式匹配多行字符串中的多次出现
【发布时间】:2015-07-24 10:19:29
【问题描述】:

我有这种多行 CSS 样式:

.style-1 {
    border-color: #2980B9;
}

.style-2 {
    background-color: #2980B9;
    #FFF;
}

.style-3 input[type=submit] {
    background-color: #2980B9;
    color: #FFF;
}

这是我的正则表达式模式:\..*\{\s?\s?+.*\s?\}\s?\s?+

https://regex101.com/r/tP7qE7/1

我想匹配从选择器到右括号的每条规则,这样我就可以在每条规则之前添加新的选择器并分别回显每条规则。现在,使用上面的正则表达式模式,我只能得到第一条规则。我尝试了preg_match()preg_match_all(),但没有成功。如何使用正则表达式匹配每个规则?

提前谢谢你!

【问题讨论】:

    标签: php css regex


    【解决方案1】:

    您可以将以下正则表达式 (\..*?\{.*?\}) 与 gs 修饰符一起使用:

    /\..*?\{.*?\}/gs
    

    DEMO

    【讨论】:

    • 谢谢!这最终是我在 PHP 中的做法:preg_match_all( "#[\.|\#].*?\{.*?\}#s", $css, $matches ); g 修饰符无法识别,所以我必须使用 preg_match_all()
    • 您可以将其更改为preg_match_all( "#[.#].*?\{.*?\}#s", $css, $matches ); .. 无需在字符集[ ] 中转义字符,也无需| .. 它默认应用在其中.. 乐于助人: )
    【解决方案2】:
    \..*?\{\s?\s?+[\s\S]*?\s?\}\s?\s?+
    

    你可以使用这个。查看演示。

    https://regex101.com/r/tP7qE7/3

    【讨论】:

      【解决方案3】:

      你可以试试这个模式来匹配选择器

      (?s)^\..*?\{.*?\}$
      

      【讨论】:

        猜你喜欢
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-19
        • 2011-06-21
        相关资源
        最近更新 更多