java regex获取字符串的某些部分

时间:2012-08-08 20:33:20

标签: java android regex

我第一次尝试在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>

我的需求是获取 href alt 中的字符串。为此,我正在执行此代码:

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

等等。目前我只是试图获得 href 而没有成功。返回始终是整个字符串。不对吗?我把html扩展名保证,没有任何事情发生。

3 个答案:

答案 0 :(得分: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++;
    }
  }

答案 1 :(得分:1)

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

在正则表达式中如下:

* matches 0 or more of the preceding character

. is any character

所以你当前的正则表达式试图找到匹配模式的字符串,其中有a,a字边界,字符串href,0或更多=字符,然后是任何字符后跟html或任何字符后跟htm和然后a>字符。如果你想使用那些特殊字符,你需要逃避它们

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

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

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

答案 2 :(得分:1)

请勿对此任务使用正则表达式,除非绝对知道文本格式不会更改。你似乎想用regexps解析(X | HT)ML,那就是a bad thing。我建议解析为XML并使用XPath。