【问题标题】:white space matching regular expressions空格匹配正则表达式
【发布时间】:2018-04-14 15:29:22
【问题描述】:

我有以下两种模式来匹配带有可能的前导空格的 html 标记名称。 [ ]* 位于命名组 <doubletag> 内的第一个模式不起作用,但 [ ]* 紧跟标记符号 "<" 的第二个模式起作用。我不知道为什么第一个不起作用。

 String s = "<      pre href = "dajflka" >ld fjalj09u293 ^% </pre>";
 Pattern ptr = Pattern.compile("(<(?<doubletag>[ ]*[a-z]+)([ \\d\\s\\w\\W[^>]])*>)(.*)(</\\k<doubletag>[ ]*>)");
 Pattern ptr = Pattern.compile("(<[ ]*(?<doubletag>[a-z]+)([ \\d\\s\\w\\W[^>]])*>)(.*)(</\\k<doubletag>[ ]*>)");
 Matcher match = ptr.matcher(s);
 if(match.find()){
        System.out.println("Found");
  }

【问题讨论】:

  • 用 RegExp 解析 HTML 不是那么精确,你应该使用类似 jsoup 这样的东西。
  • @Titus 我知道。我只是在hackerrank中解决正则表达式的问题。谢谢!

标签: java regex regex-group


【解决方案1】:

实际上,第一个模式可以找到前导空格。如果您只尝试第一个模式的第一组:

String s = "<      pre href = \" dajflka \" >";
Pattern pattern = Pattern.compile("<(?<doubletag>[ ]*[a-z]+)([ \\d\\s\\w\\W[^>]])*>");
Matcher match = pattern.matcher(s);
if (match.find()) {
    System.out.println("Found");
    System.out.println(match.group("doubletag"));
}

你会得到doubletag:

"      pre"

问题是,在&lt;/pre&gt; 中,它没有前缀空格,所以无法找到组(&lt;/\k&lt;doubletag&gt;[ ]*&gt;)。这就是为什么第一个模式不能匹配整个字符串的原因。

【讨论】:

  • 这样做。非常感谢!
【解决方案2】:

\s 是空格,如果这是你想要的,请输入[\s]*

【讨论】:

  • 问题不在于 [ ]* 或 \\s* 无关紧要。问题是第一个模式与空白不匹配,尽管我在组 "[ ]*...." 中考虑了它,但是当我使用移动时尝试第二个模式组之前的 [ ]* 为 "...." 它工作正常。对我来说,两者看起来相似。那么,为什么第一个不起作用?
猜你喜欢
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 2018-02-16
  • 2010-10-08
  • 2020-08-22
  • 2014-03-25
  • 1970-01-01
相关资源
最近更新 更多