gpt4 book ai didi

正则表达式 - 如何将文本与前瞻模式相匹配

转载 作者:行者123 更新时间:2023-12-01 13:23:31 24 4
gpt4 key购买 nike

标题可能令人困惑,但我想实现的是:

我有字符串:

14:00:01 | some text XXCODE <some text> 
some text
]
14:00:02 | some text <some text> XXCODE error
sometext
]
14:00:03 | some text XXCODE <some text>
some text
and more text 412432
]

我想匹配以 14:00 开头、字符串为 XXCODE 并以第一个括号 ] 结尾的文本和在此括号文本 error 之前的任何位置。

所以在上面的例子中我想匹配:

14:00:02 | some text <some text> XXCODE error 
sometext
]

我试过正则表达式:/14\:00(?=.*?error).*?XXCODE.*?\n]/gs

但没有成功,因为它也匹配没有“错误”的第一次出现。如何仅在我的匹配中将以上内容与前瞻相匹配?可能吗?

最佳答案

您可以使用以下模式:

^14:00\b[^]]*XXCODE[^]]*error[^]]*]

为了在每一行的开头匹配 确保将多行标志传递给正则表达式编译器(除非你在像 Notepad++ 这样的文本编辑器、像 sed 这样的基于行的工具或Ruby,其中 ^ 已经匹配一行的开头)。

查看regex demo

详情

  • ^ - 行首(与多行修饰符一起使用时)
  • 14:00\b - 作为一个完整单词的 14:00
  • [^]]* - 除了 ] 以外的 0+ 个字符
  • XXCODE - 文字 XXCODE 子串
  • [^]]* - 除了 ] 以外的 0+ 个字符
  • error - 文字 error 子串
  • [^]]* - 除了 ] 以外的 0+ 个字符
  • ] - 一个 ] 字符。

如果最后一个关闭的 ] 必须位于单独的一行,您可以使用

^14:00\b[^]]*XXCODE[^]]*error.*\r?\n(?:(?!]$).*\r?\n)*]$

this regex demo

这里,.*\r?\n(?:(?!]$).*\r?\n)*]$ 部分很有趣:

  • .*\r?\n - 匹配第一行的其余部分
  • (?:(?!]$).*\r?\n)* - 匹配 0+ 个序列:
    • (?!]$) - 在新行开始之后的行尾不能有 ]
    • .*\r?\n - 该行的其余部分
  • ]$ - 匹配行尾的 ]

如果 error 可能出现在 XXCODE 之前,则使用交替:

^14:00\b[^]]*(?:XXCODE[^]]*error|error[^]]*XXCODE)[^]]*]

another regex demo

关于正则表达式 - 如何将文本与前瞻模式相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48906176/

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