小编典典

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

java

我试图做一个有条件的正则表达式,我知道堆栈溢出还有其他帖子,但是对这个问题太具体了。


问题

如何创建仅在特定条件下才能匹配的正则表达式?


一个例子

例如,如果我们有一个字符串列表( 在java中 ):

String nums = "42 36 23827";

并且我们只想匹配x字符串末尾与开头相同数量的

在这个例子中我们想要什么

在此示例中,我们需要一个正则表达式来检查结尾处是否有与开始时相同数量的正则表达式。 条件部分
:如果x开头有,则检查结尾是否有很多,如果有则匹配。


另一个例子

例如,如果我们有一个字符串格式的数字列表( 在java中 ):

String nums = "42 36 23827";

我们想将每个数字分成一个列表

String splitSpace = "Regex goes here";
Pattern splitSpaceRegex = Pattern.compile(splitSpace);
Matcher splitSpaceMatcher = splitSpaceRegex.matcher(text);
ArrayList<String> splitEquation = new ArrayList<String>();

while (splitSpaceMatcher.find()) {
    if (splitSpaceMatcher.group().length() != 0) {
        System.out.println(splitSpaceMatcher.group().trim());
        splitEquation.add(splitSpaceMatcher.group().trim());
    }
}

我怎样才能使它成为看起来像这样的数组:

["42", "36", "23827"]

您可以尝试制作一个简单的正则表达式,如下所示:

String splitSpace = "\\d+\\s+";

但这不包括"23827" because there is no space after it. and we only want to match if there are the same amount of字符串开头的x`

在这个例子中我们想要什么

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


结论

因此,问题是,我们如何制作条件正则表达式?感谢您的阅读和欢呼!


阅读 896

收藏
2020-11-30

共1个答案

小编典典

Java正则表达式中没有条件。

我想要一个正则表达式来检查结尾处是否有与开始时相同的正则表达式。条件部分:如果开头有x,则检查结尾是否有x,如果有则匹配。

这可能可以解决,也可能无法解决。如果您想知道特定的字符串(或模式)是否重复,可以使用反向引用来完成;例如

   ^(\d+).+\1$

将匹配由任意数字,任意数量的字符和开头匹配的相同数字组成的行。反向引用\1匹配由group匹配的字符串1

但是,如果你想同样 数量 的数字在年底为在启动(这个数字是不是一个常数),那么你可以使用一个(Java)的正则表达式没有实现这一点。

请注意,某些正则表达式语言/引擎确实支持条件语句。请参阅Wikipedia
正则表达式引擎比较页面。

2020-11-30