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

正则表达式,匹配器仅返回第一个结果

冯德佑
2023-03-14

你好,我在Java中使用正则表达式时遇到了一个问题。

我试图解析这个:

*whatever string*
<AttributeDesignator AttributeId="MyIDToParse"
DataType="http://www.w3.org/2001/XMLSchema#string"
Category="theCategoryIWantToParse"
MustBePresent="false"
/>
*whatever string ***that may contain the same regular expression again*** *

使用此代码(模式匹配器)

        Pattern regex = Pattern.compile("AttributeDesignator AttributeId=\"(.+?)\".*Category=\"(.+?)\"", Pattern.DOTALL);

    Matcher matcher = regex.matcher(xml);
    while (matcher.find()) {
    String ID = matcher.group(1);
    String Category = matcher.group(2);

我的问题是,我的regexp只返回模式的第一次出现,即使我有一段时间(matcher.find())。。

共有2个答案

彭礼骞
2023-03-14

您的问题是*Category=\'(.)会显示所有剩余文本。您必须将其关闭为Category=\'(.)\”。

郜驰
2023-03-14
Pattern regex = Pattern.compile("AttributeDesignator +AttributeId=\"(.+?)\" +.*?Category=\"(.+?)", Pattern.DOTALL);

使用非贪婪而不是贪婪的量词。

 类似资料:
  • 问题内容: 我想获得正则表达式的第一场比赛。 在这种情况下,我得到了一个列表: [‘33’,‘44’] 我可以提取列表的第一个元素: ‘33’ 但这仅在至少有一个匹配项的情况下有效,否则我将收到错误消息: IndexError:列表索引超出范围 在这种情况下,我可以定义一个函数: 是否有一种无需定义新功能即可获得该结果的方法? 问题答案: 您可以通过添加默认值到您的正则表达式中: 也可以与其他人指

  • 我有一根这样的绳子 余额:“5048543747”,余额:“5119341413”,帐号:“0001000918”, 我使用了REGEX (.*?), 结果我收到的第一个子字符串是 余额:“5048543747” 实际上,我想要得到的结果是数组包括 { 余额:“5048543747” Baldefovd:“5119341413” 账号:“0001000918” } 有人能帮我吗。多谢。 编辑 我使

  • 我想用正则表达式解析一个字符串,字符串的例子是 罗得:他说:你不能通过 我想将作为一个组捕获,并且。然而,当我使用我的模式时,它返回 和 他说:你不应该使用正则表达式传递吗?

  • 我有一个字符串表达式,需要从中获取一些值。字符串如下所示 从这个stribg中,我需要获取一个字符串数组列表,其中包含“example ple1”、“example ple2”等值。 我有一个Java的方法如下所示: 但<code>m。find()总是返回<code>false。我缺少什么吗?

  • 根据下面的示例,我有一个正则表达式模式。 但是,作为一个一次性的派生,如果只有一个模式(匹配第一个实例的空白行&模式上方的一个空格),我可以让下面的内容匹配。 http://regex101.com/r/ey0ic7 但是,如果模式位于第一行,则没有匹配。

  • 问题内容: 如何匹配“ Hello world”或“ Hello World”形式的句子。该句子可能包含“-/数字0-9”。任何信息对我都会非常有帮助。谢谢。 问题答案: 这将做得很好。我对句子的定义:句子以非空格开头,以句点,感叹号或问号(或字符串结尾)结尾。标点符号后可能会有一个结束语。 这是输出: 正确地匹配所有这些(最后一个句子没有结尾标点符号),看起来似乎并不那么容易!