0

我第一次尝试在 Java 中使用 Regex。我想得到一个字符串的某些部分。字符串有点复杂:

<description>
  &lt;a href='http://testlink.html' alt='some text'&gt;&lt;img border='0'
  src='http://s2.glbimg.com/zzag70iNYX-QK24sUp0YXQmmXhx7yb8j2Sq2YK7tvX3A6vCwEUOFnFTBONQFT-
  ni/s.glbimg.com/es/ge/f/original/2012/04/25/image.jpg' 
  alt='some' title='text' /&gt;&lt;/a&gt;&lt;br /&gt;some text; some text
</description>

我的需要是获取位于hrefalt中的字符串。为此,我正在执行此代码:

for(Element element : elements)
{
    //Elements children = element.children();
Pattern pattern = Pattern.compile("a\\bhref=*(.html|.htm)>");
String[] data = pattern.split(element.text()); ...
}

等等。目前,我试图仅获得href而没有成功。返回值始终是整个字符串。不正确吗?我已经把 html 扩展名保证了,没有任何反应。

4

3 回答 3

1

你的正则表达式不会找到对你有用的东西,甚至可能被破坏。

以下在正则表达式中是正确的:

* matches 0 or more of the preceding character

. is any character

因此,您当前的正则表达式正在尝试查找与以下模式匹配的字符串特点。如果你想使用这些特殊字符,你需要转义它们

形成正则表达式的更好方法就像上面的 Alogomorph 示例。

请查看正则表达式的 Java 文档以获取有关允许的更多信息:http: //docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

网络上还有很多其他教程和示例。

于 2012-08-08T20:54:59.147 回答
1
public static void main(String[] args){
  String sourcestring = "<description>&lt;a href='http://testlink.html' alt='some text'&gt;&lt;img border='0' src='http://s2.glbimg.com/zzag70iNYX-QK24sUp0YXQmmXhx7yb8j2Sq2YK7tvX3A6vCwEUOFnFTBONQFT-
ni/s.glbimg.com/es/ge/f/original/2012/04/25/image.jpg' 
alt='some' title='text' /&gt;&lt;/a&gt;&lt;br /&gt;some text; some text</description>";
  Pattern re = Pattern.compile("(?<=href='|alt=')[^']*|(?<=href=\"|alt=\")[^\"]*");
  Matcher m = re.matcher(sourcestring);
  int mIdx = 0;
    while (m.find()){
      for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
        System.out.println( "[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx));
      }
      mIdx++;
    }
  }
于 2012-08-08T20:50:32.370 回答
1

请勿在此任务中使用正则表达式,除非您绝对知道文本格式不会改变。您似乎想使用正则表达式解析 (X|HT)ML,这是一件坏事。我建议解析为 XML 并使用 XPath。

于 2012-08-08T21:03:14.857 回答