当前位置: 首页 > 面试题库 >

查找所有匹配的子字符串,而不仅仅是“最扩展的”

锺英卫
2023-03-14
问题内容

代码

String s = "y z a a a b c c z";
Pattern p = Pattern.compile("(a )+(b )+(c *)c");
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}

版画

a a a b c c

哪个是对的。

但是从逻辑上讲,子字符串

a a a b c
a a b c c
a a b c
a b c c
a b c

也匹配正则表达式。

所以,我怎样才能使代码找到那些子也一样,即不仅 多数扩展 之一,也是它的 孩子们


问题答案:

您可以使用诸如和的勉强限定词。与标准相比,它们尽可能少地匹配并且贪婪地匹配,即尽可能地匹配。尽管如此,这仅允许您找到特定的“子匹配项”,而不是全部。使用提前控制非捕获组可以实现更多控制,文档中也有介绍。但是,为了真正找到所有子匹配项,您可能必须自己做一些事情,例如,构建正则表达式所对应的自动机并使用自定义代码进行导航。*?``+?``*``+



 类似资料:
  • 问题内容: 我想同时执行完全的单词匹配和部分的单词/子字符串匹配。例如,如果我搜索“男士剃须刀”,那么我应该能够在结果中找到“男士剃须刀”。但是,如果我搜索“剃须刀”,那么在结果中我也应该能够找到“剃须刀”。我使用以下设置和映射: 索引设置: 对应: 插入记录: 查询: 1.按完全匹配的词组进行搜索- >“男式” 上面的查询在返回结果中返回“男士剃须刀”。 2.按部分单词匹配搜索- >“ en’s

  • 问题内容: 我需要解析一个HTML文档并查找其中所有出现的字符串。 我目前将HTML加载到字符串变量中。我只需要字符位置,这样我就可以遍历列表以在字符串之后返回一些数据。 该函数仅返回第 一个 匹配项。如何 全部 归还呢? 问题答案: 在不使用正则表达式的情况下,类似这样的方法应该可以返回字符串位置:

  • 问题内容: 我正在尝试从Java字符串中找到所有三个字母子字符串。 例如,从字符串“ example string”中,我应该得到“ exa”,“ xam”,“ amp”,“ mpl”,“ ple”,“ str”,“ tri”,“ rin”,“ ing”。 我尝试使用Java正则表达式“([[a-zA-Z]){3}”,但仅得到“ exa”,“ mpl”,“ str”,“ ing”。 有人可以告诉我

  • 给定两个字符串,我想识别从最长到最短的所有公共子字符串。 最后,我需要检查一个字符串与数千个字符串的固定列表。我不确定在散列出这些字符串中的所有子字符串时是否有一个明智的步骤。 先前的答复: 在这个线程中,发现了一个动态编程解决方案,它需要O(nm)时间,其中n和m是字符串的长度。我对一种更有效的方法感兴趣,它将使用后缀树。 背景: 我正在根据旋律片段创作歌曲旋律。有时,一个组合会产生一个旋律,与

  • 问题内容: 我有一个来自数据库的数据。我添加了一个搜索功能,如果在将数据键入到中时单词匹配某些行,则显示行。但是在您键入与任何行数据都不匹配的字符串或单词的那一刻,我要做的是隐藏所有行,并且将仅显示列名。就像匹配IT时一样,仅显示具有用户键入的字符串的行并隐藏其他行。 这是我正在使用的代码: 问题答案: 您要与行过滤器一起使用。您可以看到如何编写DocumentListener。 基本上,侦听器侦

  • 我试图找出我的字符串是否包含从a到z的所有字母 我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。