Java 如何根据条件进行正则表达式匹配?

Java 如何根据条件进行正则表达式匹配?,java,regex,Java,Regex,我正在尝试创建一个条件正则表达式,我知道还有其他关于堆栈溢出的帖子,但是问题太特殊了 问题 如何创建一个正则表达式,使其看起来只与给定条件下的某个内容匹配 一个例子 这方面的一个例子是,如果我们有一个字符串列表,这是在java中: 字符串nums=423623827; 我们只想在字符串末尾和开头的x数量相同的情况下进行匹配 在这个例子中我们想要什么 在本例中,我们需要一个正则表达式来检查末尾是否有与开头相同数量的正则表达式。条件部分:如果开头有x,那么检查结尾是否有那么多,如果有,那么它是匹配的

我正在尝试创建一个条件正则表达式,我知道还有其他关于堆栈溢出的帖子,但是问题太特殊了

问题 如何创建一个正则表达式,使其看起来只与给定条件下的某个内容匹配

一个例子 这方面的一个例子是,如果我们有一个字符串列表,这是在java中:

字符串nums=423623827; 我们只想在字符串末尾和开头的x数量相同的情况下进行匹配

在这个例子中我们想要什么 在本例中,我们需要一个正则表达式来检查末尾是否有与开头相同数量的正则表达式。条件部分:如果开头有x,那么检查结尾是否有那么多,如果有,那么它是匹配的

另一个例子 这方面的一个例子是,如果我们有一个数字列表,这是java中的字符串格式:

字符串nums=423623827; 我们想把每个数字分成一个列表

String splitSpace=Regex在这里; Pattern splitSpaceRegex=Pattern.compilesplitSpace; Matcher splitSpaceMatcher=splitspacegex.matchertext; ArrayList SpliteEquation=新的ArrayList; 而splitSpaceMatcher.find{ 如果splitSpaceMatcher.group.length!=0{ System.out.printlnsplitSpaceMatcher.group.trim; splitEquation.addsplitSpaceMatcher.group.trim; } } 如何将其生成如下所示的数组:

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Ideone {
    public static void main(String args[]) {
        final String sample = "123 45 678 90";
        final Pattern pattern = Pattern.compile("\\b\\d+\\b");
        final Matcher matcher = pattern.matcher(sample);
        final ArrayList<String> results = new ArrayList<>();
        while (matcher.find()) {
            results.add(matcher.group());
        }
        System.out.println(results);
    }
}
[42, 36, 23827] 您可以尝试制作一个简单的正则表达式,如下所示:

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Ideone {
    public static void main(String args[]) {
        final String sample = "123 45 678 90";
        final Pattern pattern = Pattern.compile("\\b\\d+\\b");
        final Matcher matcher = pattern.matcher(sample);
        final ArrayList<String> results = new ArrayList<>();
        while (matcher.find()) {
            results.add(matcher.group());
        }
        System.out.println(results);
    }
}
字符串拆分空间=\\d+\\s+; 但这排除了23827,因为它后面没有空间。 我们只想在字符串末尾的x`'数量与字符串开头的x`'数量相同的情况下进行匹配

在这个例子中我们想要什么 在这个例子中,我们需要一个正则表达式来检查它是否是字符串的结尾;如果是这样,我们就不需要空间,否则我们需要。正如@YCF_L所提到的,我们可以创建一个正则表达式,即\\b\\d\\b,但我的目标是有条件的

结论
因此,问题是,我们如何生成条件正则表达式?谢谢你的阅读和干杯

我想使用split,它接受regex,如下所示:

String[] split = nums.split("\\s+"); // ["42", "36", "23827"]
如果要将模式与Matcher一起使用,则可以将字符串\b\d+\b与单词边界一起使用

String regex = "\\b\\d+\\b";

通过使用单词边界,您将避免数字是单词一部分的情况,例如123 a4 5678 9b,您将只得到[123,4578]

我看不到问题中的条件。这个问题可以用一个直接的正则表达式解决:\b\d+\b

一个成熟的Java示例如下所示:

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Ideone {
    public static void main(String args[]) {
        final String sample = "123 45 678 90";
        final Pattern pattern = Pattern.compile("\\b\\d+\\b");
        final Matcher matcher = pattern.matcher(sample);
        final ArrayList<String> results = new ArrayList<>();
        while (matcher.find()) {
            results.add(matcher.group());
        }
        System.out.println(results);
    }
}
输出:[123,45,678,90]


Java正则表达式中没有条件

我想要一个正则表达式,检查是否有相同数量的正则表达式在结尾,因为有在开始。条件部分:如果开头有x,那么检查结尾是否有那么多,如果有,那么它是匹配的

这可能是可以解决的,也可能不是。如果您想知道某个特定字符串或模式是否重复,可以使用back引用来完成;e、 g

   ^(\d+).+\1$
将匹配由任意数量的数字、任意数量的字符和开头匹配的相同数字组成的行。反向引用\1与组1匹配的字符串匹配

但是,如果您希望末尾的位数与开头的位数相同,并且该位数不是常量,那么您就不能使用单个Java正则表达式来实现这一点


注意,一些正则表达式语言/引擎确实支持条件;请参阅维基百科页面。

@Turing85我不同意这一点,相反,我会使用@YCF|L,谢谢,我会在我的答案中包含这一点。好的,如果您想在您的案例中使用条件,您可以使用\\d+\\s+| \\d+$,其中|表示or@YCF_L如果你把这个加在你的答案上,那将是一个非常好的答案。你认为我应该改变这个例子吗?我的意思是我想找出条件句。你的答案很有帮助,但也许你可以包括一个解决方案,检查它是否是字符串的结尾,也包括这个答案。我不完全明白你的意思。对于字符串的结尾,使用$。对于字符串的开头,使用^。请尝试用一个条件来构造一个例子。我会改变这个例子,但我的意思是:检查它是否在结尾,如果结尾不需要空格,否则如果不是结尾,我们确实需要空格。不!请不要改变这个问题。这将使答案无效。有可选组,例如。G仅允许@作为字符串的最后一个字符。我将添加另一个示例。您可能希望在边界是什么的问题上多留一句话。@BeastCoder检查此项和单词Boundary我又添加了一个示例。谢谢你的帮助response@BeastCoder我不知道你在我的问题上有什么不明白的地方,检查一下这个演示,它给你的输出和你的一样
expectNo,我完全理解。我只添加了一个示例,因为Turing说我需要演示一个更具条件的示例,而且我不知道谁投了反对票,但我会投赞成票。感谢您的回答,很高兴知道在Java中不可能做到这一点。非常感谢你的回答,我相信这将有助于所有人看待这个问题。