首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正则表达式匹配具有特定文本的第一组

正则表达式匹配具有特定文本的第一组
EN

Stack Overflow用户
提问于 2019-05-23 03:29:24
回答 1查看 67关注 0票数 2

我正在尝试匹配包含特定文本的文本块。每个块都由标准的开始/结束文本模式清楚地定义。

在下面的示例中,我希望匹配"step start“到"step end”中的步骤1和3,因为它们包含文本"database:dev“。但是,我当前的正则表达式可以很好地匹配步骤1,但随后在单个匹配中匹配步骤2和3。下面的示例可能更容易理解:https://regex101.com/r/56tfOQ/3/

我需要指定每个匹配只能包含一个"step start",但我不知道如何做到这一点。

我目前使用的正则表达式是:

代码语言:javascript
复制
(?msi)step start.*?database:dev.*?step end

文本的一个例子是:

代码语言:javascript
复制
step start
    name:step1
    database:dev1
step end
step start
    name:step2
    database:test1
step end
step start
    name:step3
    database:dev2
step end
step start
    name:step4
    database:test2
step end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 03:42:24

在一个常见的场景中,您可以在起始分隔符和应该出现在分隔符之间的第三个字符串之间使用像(?:(?!<STOP_PATTERN>).)*?这样的tempered greedy token

您可以将正则表达式编写为

代码语言:javascript
复制
(?si)step start(?:(?!step start).)*?database:dev.*?step end

但是,您的开始分隔符似乎在一行的开头。那么它就有意义使用

代码语言:javascript
复制
(?msi)^step start(?:(?!^step start).)*?database:dev.*?step end

请参阅regex demo

正则表达式图:

详细信息

  • (?msi) -多行、多行和不区分大小写模式是on
  • ^ -行开始(因为on)
  • step start选项是delimiter
  • (?:(?!^step start).)*? -开始line
  • database:dev -匹配任何字符的字符,出现/重复的次数尽可能少,不会在substring
  • .*?的开头启动step start字符序列-文字m -任何tempered greedy token字符,少到0+ -结束分隔符。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56263709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档