【问题标题】:Regex to fetch dynamic value from html tag正则表达式从 html 标签中获取动态值
【发布时间】:2020-05-23 23:53:38
【问题描述】:

我有一个字符串格式的 html 标签。我需要从中获取一个动态值。

输入字符串:

final String str = "<input type=\"hidden\" name=\"OFBIZ_FRAMEWORK_REQUEST_SYNCH_TOKEN\" value=\"1590137573579\">\n";

我需要从上面的字符串中获取 value 属性。 (即 1590137573579 - 此值动态变化)

下面共享的是我尝试过的正则表达式,它给出了结果,但确定它是否是正确的正则表达式。

String regex = "value=\"(.*?)\"";

这里可以提供一些正确的正则表达式的帮助吗?

【问题讨论】:

  • 只是为了让事情变得简单。如果您尝试解析 html 文件,请查看jsoup.org
  • 我觉得答案完全集中在错误的事情上。 OP已经说过它对他有用。如果有任何需要更改的地方,“值”周围应该有单词边界,以确保它不会尝试匹配以“值”结尾的属性。否则,这个正则表达式是一个如此幼稚的简单搜索,所提议的更改都不重要。

标签: java regex


【解决方案1】:

您的正则表达式需要 38 个步骤来匹配值 Demo

如果值总是一个数字,你可以使用:

String regex = "value=\"(\d*)\"";

需要12个步骤Demo

如果 value 可以包含除双引号之外的任何字符,请使用:

String regex = "value=\"([^\"]*)\"";

也需要12个步骤Demo

【讨论】:

    【解决方案2】:
    String regex = "value=\\\"(.*?)\\\"";
    

    您可以尝试同时转义反斜杠符号 (\) 和引号符号 (")。

    【讨论】:

      【解决方案3】:

      试试这个:

      import java.util.regex.*;
      
      public class RegexTest {
      
          public static void main(String args[]){
      
              final String str = "<input type=\"hidden\" name=\"OFBIZ_FRAMEWORK_REQUEST_SYNCH_TOKEN\" value=\"1590137573579\">\n";
      
              String regex = "value=\\\"(.*?)\\\"";
      
              Pattern pattern = Pattern.compile(regex);
              Matcher matcher = pattern.matcher(str);
              while (matcher.find()) {
                  System.out.println(matcher.group(1));
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多