PHP 正则表达式环顾四周,匹配多次出现
PHP regex look around with matching multiple occurrences
我有这样的文字:
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
个对象)。
任何朝着正确方向的推动都会受到欢迎
link 您可以在这里进行测试:https://regex101.com/r/I4W5cR/1
您可以利用每个匹配项在行首以 const
开头的事实:
(?sm)^const {(.*?)}\s*\R(?=const|\Z)
详情
(?sm)
- s
启用 DOTALL 模式,m
使 ^
匹配行起始位置
^
- 行首
const {
- 一个子串
(.*?)
- 第 1 组:任意零个或多个字符,尽可能少
}
- 一个 }
字符
\s*\R
- 零个或多个空格,然后是换行符
(?=const|\Z)
- 紧靠右边,必须有 const
或字符串结尾。
我有这样的文字:
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
个对象)。
任何朝着正确方向的推动都会受到欢迎
link 您可以在这里进行测试:https://regex101.com/r/I4W5cR/1
您可以利用每个匹配项在行首以 const
开头的事实:
(?sm)^const {(.*?)}\s*\R(?=const|\Z)
详情
(?sm)
-s
启用 DOTALL 模式,m
使^
匹配行起始位置^
- 行首const {
- 一个子串(.*?)
- 第 1 组:任意零个或多个字符,尽可能少}
- 一个}
字符\s*\R
- 零个或多个空格,然后是换行符(?=const|\Z)
- 紧靠右边,必须有const
或字符串结尾。