Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式查找多个匹配项_Java_Regex - Fatal编程技术网

Java 使用正则表达式查找多个匹配项

Java 使用正则表达式查找多个匹配项,java,regex,Java,Regex,我正在尝试查找所有出现的(可能是零个或更多)锚()HTML标记,这些标记具有特定属性/文本(作为组捕获) Regex:(.+) 输入字符串: First <a attr1="myattr" attr2="value12" attr3="value13">text1</a> Second <a attr1="myattr" attr2="value12" attr3="value13">text1</ a> Third <a attr1="my

我正在尝试查找所有出现的(可能是零个或更多)锚(
)HTML标记,这些标记具有特定属性/文本(作为组捕获)

Regex
(.+)

输入字符串

First <a attr1="myattr" attr2="value12" attr3="value13">text1</a> Second <a attr1="myattr" attr2="value12" attr3="value13">text1</
a> Third <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
First text1 Second text1 Third text1

结果:只发现一例。它返回的是第一次出现的默认情况下,
正则表达式是贪婪的,因此
*
将匹配尽可能多的字符。您应该改为使用
*?
进行非贪婪模式。

Regex默认为贪婪模式,因此
*
将匹配尽可能多的字符。您应该使用
*?
作为非贪婪模式。

如用户4098326所述,问题在于贪婪。由于您使用了大量的
+
组,因此在字符串结束之前,它们将消耗尽可能多的字符


如用户4098326所述,问题在于贪婪。由于您使用了大量的
+
组,因此在字符串结束之前,它们将消耗尽可能多的字符

。像容易犯错误这样的事情(比如使用贪婪的
*
而不是勉强的
*?
)只是我们应该避免将正则表达式与XML/HTML混合的一小部分原因

  • 如果属性被
    包围,而不是
  • 如果您的HTML包含JavaScript代码,而JavaScript代码具有
    document.write(“)

    这样,您的代码选择所有具有属性的
    attr1
    attr2
    attr3
    a
    标记时

    Elements elements = doc.select("a[attr1][attr2][attr3]");
    
    演示:

    String html=“第一个文本1”
    +“第二个文本1”
    +“第三文本1”;
    Document doc=Jsoup.parse(html);
    Elements=doc.select(“a[attr1][attr2][attr3]”;
    用于(元素el:元素){
    系统输出打印项次(el);
    系统输出打印项(el.attr(“attr 1”);
    系统输出打印LN(el.attr(“attr2”));
    系统输出打印项次(el.attr(“attr3”);
    System.out.println(el.text());
    System.out.println(“--------------”;
    }
    
    输出:

    <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
    myattr
    value12
    value13
    text1
    --------------
    <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
    myattr
    value12
    value13
    text1
    --------------
    <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
    myattr
    value12
    value13
    text1
    --------------
    
    text1
    迈特
    价值12
    价值13
    文本1
    --------------
    文本1
    迈特
    价值12
    价值13
    文本1
    --------------
    文本1
    迈特
    价值12
    价值13
    文本1
    --------------
    
    。我们应该避免将正则表达式与XML/HTML混用的原因只有一小部分,比如容易出错(比如使用贪婪的
    *
    而不是勉强的
    *?

    • 如果属性被
      包围,而不是
    • 如果您的HTML包含JavaScript代码,而JavaScript代码具有
      document.write(“)

      这样,您的代码选择所有具有属性的
      attr1
      attr2
      attr3
      a
      标记时

      Elements elements = doc.select("a[attr1][attr2][attr3]");
      
      演示:

      String html=“第一个文本1”
      +“第二个文本1”
      +“第三文本1”;
      Document doc=Jsoup.parse(html);
      Elements=doc.select(“a[attr1][attr2][attr3]”;
      用于(元素el:元素){
      系统输出打印项次(el);
      系统输出打印项(el.attr(“attr 1”);
      系统输出打印LN(el.attr(“attr2”));
      系统输出打印项次(el.attr(“attr3”);
      System.out.println(el.text());
      System.out.println(“--------------”;
      }
      
      输出:

      <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
      myattr
      value12
      value13
      text1
      --------------
      <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
      myattr
      value12
      value13
      text1
      --------------
      <a attr1="myattr" attr2="value12" attr3="value13">text1</a>
      myattr
      value12
      value13
      text1
      --------------
      
      text1
      迈特
      价值12
      价值13
      文本1
      --------------
      文本1
      迈特
      价值12
      价值13
      文本1
      --------------
      文本1
      迈特
      价值12
      价值13
      文本1
      --------------
      
      您想使用正则表达式而不是像jsoup这样的HTML解析器有什么特殊原因吗?您想使用正则表达式而不是像jsoup这样的HTML解析器有什么特殊原因吗?谢谢您的帮助。非贪婪模式帮助解决了这个问题。谢谢您的帮助。非贪婪模式帮助解决了这个问题。