【问题标题】:Need Regex Expression Advice需要正则表达式建议
【发布时间】:2012-04-11 16:44:21
【问题描述】:
<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>

我知道这个正则表达式用于检索 src 的值。谁能教我应该如何解释这个表达?坚持下去。

【问题讨论】:

  • 解释是什么意思?了解正则表达式中每个字符的含义,还是想知道如何使用此正则表达式检索 src 属性值?

标签: java regex expression


【解决方案1】:

解释:

  • &lt;img 与字符串 "&lt;img" 完全匹配
  • [^&gt;]+ 匹配除&gt; 之外的所有内容多次,因此标签不会被关闭
  • src 完全匹配字符串“src”
  • \\s* 匹配任意数量的空白字符
  • = 完全匹配字符串 "="
  • \\s* 匹配任意数量的空白字符
  • ['\"] 匹配两个引号。双引号被转义,否则它将终止正则表达式的字符串
  • ([^'\"]+) mathches 除了引号之外的所有内容。内容用括号括起来,以便它们被声明为组并且可以稍后检索
  • ['\"] 匹配两个引号。双引号被转义,否则它将终止正则表达式的字符串
  • [^&gt;]* 匹配剩余的非 "&gt;" 字符
  • &gt; 完全匹配字符串 "&gt;",即标记的右括号。

我不同意这个表达是废话,只是有点复杂。

编辑这里是一些示例代码:

String str = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
String text = "<img alt=\"booo\" src=\"image.jpg\"/>";
Pattern pattern = Pattern.compile (str);
Matcher matcher = pattern.matcher (text);

if (matcher.matches ())
{
      int n = matcher.groupCount ();
      for (int i = 0; i <= n; ++i)
          System.out.println (matcher.group (i));
}

输出是:

<img alt="booo" src="image.jpg"/>
image.jpg

所以matcher.group(1) 返回你想要的。用这段代码试验一下。

【讨论】:

  • 谢谢,这真的很有帮助 -> 因此 ([^'\"]+) 是 src 的值,对吗?我可以知道如何引用 ([^'\"]+) 吗?我知道我们可以使用像 $1, $2.. 这样的东西,对吗?
【解决方案2】:

您好,请查看网上可用的教程之一 - 例如http://www.vogella.com/articles/JavaRegularExpressions/article.html。第 3.1 节和第 3.2 节常用匹配符号简要解释了每个符号及其替换的内容以及元字符。把你在这里的东西分成更小的块,以便更容易理解。例如,您在两个地方有 \s 它是空白字符的元字符。反斜杠是 Java 中的转义字符,因此您使用 \s 而不是 \s。在他们每个人之后都有一个 。第 3.3 节解释了量词——这个特定的意味着它出现 0 次或多次。因此 \s 的意思是“搜索出现 0 次或更多次的空白字符”。你对其他块做同样的事情。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多