PHP正则表达式可以匹配多个匹配项

时间:2020-09-01 07:13:13

标签: regex regex-lookarounds

我有这样的文字:

const {
    b {
        description "Create B1"
        uri "ms:///a/v1/create-b"
    }
    c {
        description "Create C1"
        uri "ms:///a/v1/create-c"
    }
    d {
        description "Create D1"
        uri "ms:///a/v1/create-d"
    }
}

const {
    b {
        description "Create B2"
        uri "ms:///a/v1/create-b"
    }
    c {
        description "Create C2"
        uri "ms:///a/v1/create-c"
    }
    d {
        description "Create D2"
        uri "ms:///a/v1/create-d"
    }
}

我正在尝试使所有内容在const之间,而这是我到目前为止想出的:const {(?s)(.*)}.*?(?=const)。那只是我第一次出现,我不知道如何获取所有其他对象(在原始文件中,有更多const对象)。

欢迎朝正确的方向前进be

您可以在此处进行测试的链接:https://regex101.com/r/I4W5cR/1

1 个答案:

答案 0 :(得分:1)

您可以利用以下事实:每次比赛在行首都以const开头:

(?sm)^const {(.*?)}\s*\R(?=const|\Z)

请参见regex demo

详细信息

  • (?sm)-s启用DOTALL模式,而m使^匹配行的起始位置
  • ^-行开始
  • const {-子字符串
  • (.*?)-第1组:任何零个或多个字符,尽可能少
  • }-一个}字符
  • \s*\R-零个或多个空格,然后换行
  • (?=const|\Z)-在右边,必须有const或字符串结尾。