URL锚文本正则表达式拉拔器

时间:2013-06-15 02:43:25

标签: java regex

所以我试图找出一个对我不起作用的正则表达式。我从来都不擅长写作,并希望有人能解释我在这里做错了什么。我正试图用Java从HREF中提取锚文本。我已经下载了我正在寻找文本的页面,但是出于某种原因它不会剥离我需要它的东西。在每一页上,类和标题都不会改变 - 实际上,我只想要具有特定类和标题的那些。

s = <span class="alwaysTheSameClass"><a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</span><br>
s = s.replace(,""<span class=\"alwaysTheSameClass\"><a title=\"alwaysTheSameTitle\" href=\".*\">"")

每次我这样做,它都会打印出来。我做了一个s.contains,但它出现了错误。正如我所说,我对正则表达式很恐怖 - 我认为这个可能很简单,但我显然错了。我的问题在哪里?

谢谢你们!

2 个答案:

答案 0 :(得分:1)

有几个问题,首先您在示例中缺少关闭锚标记</a>。在你的正则表达式中,你需要转义任何/个字符,这样它们看起来就像\/。您的string.replace声明似乎缺少搜索内容部分see java manual

描述

此正则表达式将查找title属性为alwaysTheSameTitle的所有锚标记。表达式确实要求属性的值被单引号或双引号括起来。找到它后,表达式将捕获href属性值以及打开和关闭锚文本之间的字符串。此表达式将允许href和title属性以任何顺序出现在锚标记中。

<a\b(?=\s)(?=[^>]*\s\btitle=(["'])alwaysTheSameTitle\1)(?=[^>]*\s\bhref=(["'])((?:(?!\2)|.)*)\2)[^>]*>(.*?)<\/a>

enter image description here

组0将从开放标记中获取整个锚标记以关闭标记

  1. 将打开引号类型为单引号或双引号,在\1使用此类型来验证您是否具有title属性值的正确结束字符
  2. 将打开引号类型为单引号或双引号,在\2使用此类型来验证您是否具有href属性值的正确结束字符
  3. 将具有href属性值字符串,不包括引号
  4. 将字符串包含在锚标记
  5. 匹配示例

    给定输入文本<span class="alwaysTheSameClass"><a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</a></span><br>

    匹配

    [0] => <a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</a>
    [1] => "
    [2] => "
    [3] => differentEveryTime
    [4] => TextImTryingToPull
    

    声明

    内部文本应该使用html解析引擎来提取,这样可以避免在解析HTML文本的正则表达式失败时出现问题的边缘情况。但是,如果您控制HTML和/或您愿意接受由于模糊,稀有或非法html组成的罕见边缘情况的风险,此表达式将无法按预期工作,则正则表达式可能适用于你

答案 1 :(得分:0)

从DOM获得答案会容易得多。例如:

var links = document.getElementsByTagName("a")
for (foo in links){
if(links[foo].title = "always the same"){
var bar = links[foo].href; //this should get your href
alert(bar);
}
}

干杯, LC