当前位置: 首页 > 知识库问答 >
问题:

是否有任何正则表达式返回匹配数[重复]

越望
2023-03-14

我试图返回在单个文本上使用regex得到的匹配数。我需要正则表达式是全局的,不区分大小写,这样它就可以满足我的需要。

我真正需要的是:

  • 给定此regex字符串regex=“one[^w]*million”(全局和不区分大小写)

实际上,我所做的只是一个简单的检查,如果至少有一个字符与序列匹配,则返回true或false,而不是实际的匹配数。

我的代码:

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

public class Main {

    public static void main(final String[] args) {
        Main.findStrongSpamWords();
    }

    public static void findStrongSpamWords() {
        final String body = "estoOne␣⏎␣Million jvegax ONE␣MILLION million one OnE>>% mIllion spam";
        final Pattern pattern = Pattern.compile("one[^\\w]*million", Pattern.CASE_INSENSITIVE);
        final Matcher matchResult = pattern.matcher(body);
        
        System.out.println(matchResult.find());
    }
}

共有1个答案

景永春
2023-03-14

没有正则表达式可以做到这一点。但是,对于Java9及更高版本,请使用Matcher.results(). count()

    public static void findStrongSpamWords() {
        final String body = "estoOne␣⏎␣Million jvegax ONE␣MILLION million one OnE>>% mIllion spam";
        final Pattern pattern = Pattern.compile("one[^\\w]*million", Pattern.CASE_INSENSITIVE);
        final Matcher matchResult = pattern.matcher(body);
        
        System.out.println(matchResult.results().count());
    }

如果你在Java8或更早,你必须数自己:

public static void findStrongSpamWords() {
    final String body = "estoOne␣⏎␣Million jvegax ONE␣MILLION million one OnE>>% mIllion spam";
    final Pattern pattern = Pattern.compile("one[^\\w]*million", Pattern.CASE_INSENSITIVE);
    final Matcher matchResult = pattern.matcher(body);
    
    int count = 0;
    while (matchResult.find()) {
      count++;
    }
    System.out.println(count);
}
 类似资料:
  • 我有一个字符串表达式,需要从中获取一些值。字符串如下所示 从这个stribg中,我需要获取一个字符串数组列表,其中包含“example ple1”、“example ple2”等值。 我有一个Java的方法如下所示: 但<code>m。find()总是返回<code>false。我缺少什么吗?

  • 问题内容: 我正在使用模块中的函数来匹配某些东西,并且一切正常。 现在,我需要找出我有多少场比赛。是否可以不两次遍历迭代器?(先找出计数然后是真正的迭代) 一些代码: 一切正常,我只需要在循环之前获取匹配数即可。 问题答案: 如果您知道需要所有匹配项,则可以使用该功能。它将返回所有匹配项的列表。然后,您可以只进行匹配次数。

  • 问题内容: 我试图创建下面的正则表达式:返回之间的字符串和(或或)从下列字符串RNA: ,让所有的比赛会被发现,包括重叠的。 我尝试了几种正则表达式,最后得到了类似的结果: 您能告诉我我的正则表达式模式中的错误吗? 问题答案: 用一个正则表达式执行此操作实际上是非常困难的,因为大多数用法 都不 希望重叠匹配。但是,您可以通过一些简单的迭代来做到这一点: 虽然,这有一些问题。您希望得到的回报是什么?

  • 我们得到了一些这样的内容:

  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420

  • 问题内容: true)。但是,我编写了一个简单的程序,其结果表明,任何字符都根本与换行符不匹配。该程序可以在这里找到:http : //play.golang.org/p/pccP52RvKS。我真的很困惑。 任何帮助将不胜感激,并在此先感谢。 问题答案: 像大多数其他(所有?)正则表达式引擎一样,点不匹配换行符,除非您在正则表达式中添加“全部点”标志。 我使用您的链接对此进行了测试,并且可以正常