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

通过regex获取多个匹配

缪修德
2023-03-14
String str = "<strong>ABC</strong>123<strong>DEF</strong>"
Pattern pattern = Pattern.compile("<strong>(.*)</strong>");
Matcher matcher = pattern.matcher(str);
ABC</strong>123<strong>DEF

我的目标是得到两个匹配:

ABC
DEF

非常感谢你的帮助。

共有1个答案

竺勇
2023-03-14

您需要一个非贪婪的regex:

Pattern pattern = Pattern.compile("<strong>.*?</strong>");

使用指定非贪婪。这意味着它将匹配它找到的第一个匹配项,而不是外部最匹配项。

如果您只想要abcdef,那么您可以使用lookaheads和lookbehinds来执行类似的操作:

String str = "<strong>ABC</strong>123<strong>DEF</strong>";
Pattern pattern = Pattern.compile("((?<=<strong>).*?(?=</strong>))");
Matcher matcher = pattern.matcher(str);
while(matcher.find())
{
    System.out.println(matcher.group());
}
 类似资料:
  • 数据库 我对数据库有点陌生,我制作了这个小数据库,但从中获取数据时遇到了问题。我试图从登录的用户那里获取所有参赛者,它工作正常,但是如果我输入

  • 我试图在一个字符串中选择多个匹配项,如下所示: 123 废话 结束 45 废话 结束 理想情况下,我希望它返回2个以数字序列开头和以END字符串结尾的匹配项。我使用以下内容: 但是,上述模式在一个匹配项中返回整个输入字符串。我有一种感觉,这与“单行”选项有关。我做错了什么?

  • null 但问题是我的regex不是。

  • 问题内容: 当我跑步 我懂了 但我认为它应该回来 因为字符串中有3 s,而不是2! 这是为什么? 我希望能够在RegEx中搜索字符串的所有出现并对其进行迭代。 FWIW:我正在使用node.js 问题答案: 仅返回第一个匹配项的捕获集,而不返回您期望的匹配项。因此,您真正看到的是(整个匹配项“ a”)和(第一个捕获项),即长度为2的数组。 同时,它的设计使您可以 再次 调用它以获取 下一个 匹配项

  • 嗨,我特别想了解“OR”运算符在java Regex中是如何工作的。我刚刚开始使用它,大多数事情对我来说都不清楚。 所以对我来说最重要的问题是:这种行为是可靠的/可预测的,还是对于不同的平台会有所不同? 但也只是好奇...这个问题也是:我也觉得它令人困惑,因为运算符“or”对于它的自变量来说应该是对称的,就像加法一样。你可以想象当1+2和2+1带有不同的语义时人们会担心...这里的pattern1

  • 在上面的示例代码中,我想根据标题拆分文本。我想通过正则表达式确定这些标题(因为可能有同义词)但是通常返回NoneType。这显然会导致错误。如果我添加一个If条件来检查我是否不是,那么错误就会消失,但字典最终会丢失大量数据。 有人知道解决这个问题的方法吗?或者知道实现同样的事情的方法吗? 请记住,以上只是一个例子。我需要使用这个为简历/简历,因此布局和标题可以略有不同,这取决于使用的简历。