gpt4 book ai didi

php - 使用 PHP 和 RegEX 返回多个匹配项,但仅限于第一次出现模式

转载 作者:可可西里 更新时间:2023-11-01 00:54:10 25 4
gpt4 key购买 nike

我有一个看起来像的数据集

I(0,123...789){
A(0,567...999){.......n=Marc.....}
B(2,655...265){..................}
C(3,993...333){..................}
M(8,635...254){.................;}
}
O(0,345...789){
A(0,567...999){.......n=Marc.....}
B(2,876...775){..................}
C(3,993...549){..................}
M(8,354...987){.................;}
}
I(0,987...764){
A(0,567...999){.......n=Marc.....}
B(2,543...265){..................}
C(7,998...933){..................}
M(8,645...284){.................;}
}
B(0,123...789){
.......
}
I(0,987...764){
A(0,567...999){.......n=John.....}
B(2,543...265){..................}
C(7,998...933){..................}
M(8,645...284){.................;}
}

我试图返回所有 I“部分”,因此从“I”开始直到 ;} 之后的结束标记,但前提是“I”部分包含 n=Marc。

到此为止

^([I]\(.*\){.*n=Marc.*^[M]\(.*;}.)}

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

但是在某些情况下,当数据具有类似这样的模式时

I(0,123...789){
A(0,567...999){.......n=Marc.....}
B(2,655...265){..................}
C(3,993...333){..................}
M(8,635...254){.................;}
}
O(0,345...789){
A(0,567...999){.......n=Marc.....}
B(2,876...775){..................}
C(3,993...549){..................}
M(8,354...987){.................;}
}

正则表达式返回 I 和 O 部分。有没有办法确保它总是返回 I 部分?

  • 为数据集道歉,它很大并且包含很多我不能公开的敏感数据。*

最佳答案

一个选项可能是匹配 I,然后匹配所有不以 开头的行,并匹配至少 1 行包含 n=Marc

^I\([^()]*\){(?:\R(?!}|.*n=Marc).*)*\R.*\bn=Marc\b.*(?:\R(?!}).*)*\R}$

解释

  • ^ 字符串开始
  • I\([^()]*\){ 匹配 I 后跟 (...){
  • (?: 非捕获组
    • \R(?!}|.*n=Marc) 匹配unicode换行序列,断言右边不是}或者该行包含n =马克
    • .* 匹配任何字符 0+ 次
  • )*关闭非捕获组并重复0+次
  • \R 匹配unicode换行序列
  • .*\bn=Marc\b.* 匹配任何字符 0+ 次并在单词边界之间匹配 n=Marc
  • (?: 非捕获组
    • \R(?!}).* 匹配换行符序列断言右边不是
  • )* 关闭非捕获组并重复0+次
  • \R 匹配换行序列
  • 匹配结束
  • $ 字符串结束

Regex demo

关于php - 使用 PHP 和 RegEX 返回多个匹配项,但仅限于第一次出现模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com