【问题标题】:Regular expression with an = and a ;带有 = 和 a 的正则表达式;
【发布时间】:2011-01-17 11:22:33
【问题描述】:

我正在尝试使用正则表达式来查找以等号 (=) 开头并以分号 (;) 结尾且中间包含任意数量的字符的所有子字符串。应该是这样的=*;

由于某种原因,equals 没有注册。是否有某种转义字符会使正则表达式注意到我的等号?

如果这对这个问题有任何影响,我正在使用 Java。

【问题讨论】:

    标签: java regex escaping


    【解决方案1】:

    这会查找“任意数量的 = 符号,包括 0”

    =*;
    

    如果你想要“= 后跟任意数量的其他字符”

    =.*;
    

    但是,这会贪婪地匹配 - 如果您想要惰性匹配(以便在找到下一个分号时停止一个组),您可能想要:

    =.*?;
    

    【讨论】:

      【解决方案2】:

      您提供的正则表达式将匹配 ;===;、...、================;=.*;(或者 =.*?;,如果需要非贪婪)怎么样?

      【讨论】:

        【解决方案3】:

        这可能是您正在寻找的。您需要指定要应用星号的字符集或通配符。

        "=([^;]*);"
        

        你也可以使用不情愿的量词:

        "=(.*?);"
        

        使用括号你现在有组。我相信第一组是整场比赛,group[1] 是括号内的组。

        代码可能类似于:

        Regex r = new Regex("=([^;]*);");
        Match m = r.Match(yourData);
        while (m.Success) {
            string match = m.Groups[1];
            // match should be the text between the '=' and the ';'.
        }
        

        【讨论】:

        • 这让我得到了我正在寻找的东西,但是是否有可能只找到这些分隔符之间的内容?换句话说,我想得到 = 和 ; 之间的内容。实际上没有将它们包含在表达式中。谢谢
        • 如果您在要查找的值周围添加括号,您可以使用 Matcher 的 group() 方法之一来仅检索括号中的位。
        • 我将如何使用 group() 方法来做到这一点?
        • @chama 我添加了一些可能对群组有帮助的信息
        【解决方案4】:

        类似 =.*;

        【讨论】:

          【解决方案5】:

          学习 Java 正则表达式的绝佳资源:sun's book about regexp

          【讨论】:

            猜你喜欢
            • 2014-04-23
            • 1970-01-01
            • 1970-01-01
            • 2018-11-12
            • 2019-01-19
            • 2010-09-28
            • 2013-12-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多