gpt4 book ai didi

正则表达式以任意顺序匹配 0 个或多个关键字实例

转载 作者:行者123 更新时间:2023-12-04 15:47:26 30 4
gpt4 key购买 nike

我对正则表达式很满意,但在这里被难住了。我遇到了 的问题第 2 组 , 以下。但是,我认为这对于正则表达式大师来说应该相当容易......

问题

我正在尝试匹配 zero or more instances of a set of keywords, in any order
[更新:供将来引用]
最简单的解决方案(源自 black panda 的响应)是:((keyword1 | keyword2 | keyword3 )*)
注意:每个单词后面的空格是必不可少的!

就我而言,这转化为:((static |final )*)
这是最简单,最简单的答案。 black panda 中更好、性能更高的方法的回应,如下。它允许任意数量的空白,并且对于 RE 引擎来说处理速度更快。

输入

我需要将以下输入分成非常具体的组。

注意:数字不是输入的一部分。也就是说,每个输入行都以字母 p 开头。

  • 公共(public)静态最终 int ONE = 1;
  • 公共(public)最终静态 int TWO = 2;
  • 公共(public)最终 int 三 = 3;
  • 公共(public)静态 int 四 = 4;
  • 私有(private)整数五 = 5;

  • 团体

    我需要将输入分解为匹配组,以便

    第 1 组 = 公共(public)或私有(private)或 protected
    第 2 组 = 0 个或多个“静态”或“最终”实例 <-- 我正在努力解决的组
    第 3 组 = 数据类型
    第 4 组 = 变量名
    第 5 组 = 值(value)

    第 2 组详细信息

    鉴于上述输入,第 2 组将如下所示:
  • 静态最终
  • 最终静态
  • 最终
  • 静态
  • [空字符串]

  • 失败的解决方案

    这是我想出的正则表达式,id 不适用于第 2 组:
    ^.*(public|private|protected)\s+(static\s+|final\s+)*\s+([^ ]+)\s+([^ ]+)\s*(;|=)(.*)$

    对于第 2 组,我尝试过:
  • (静态\s+|最终\s+)*
  • (静态|最终)*\s+
  • (静态 |final )*
  • (静态\|final\)*

  • 概括

    匹配单词“static”或“final”的一个或多个实例的“group 2”的正则表达式应该是什么。一个适当的解决方案可以扩展为匹配任何单词的任何子集,例如 [static、final、transient、volatile]。

    最佳答案

    你能捕获中间的所有东西,并确保存在第 3 组和更大的组吗?

    第 2 组 = ((?:(?:static|final|transient|volatile)\s+)*)

    关于正则表达式以任意顺序匹配 0 个或多个关键字实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522941/

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