1

所以我试图找出一个对我不起作用的正则表达式。我从来都不擅长写它们,并希望有人能解释我在这里做错了什么。我正在尝试使用 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但它出现了错误。正如我所说,我对正则表达式感到很害怕——我认为这个可能很简单好用,但显然我错了。我的问题在哪里?

多谢你们!

4

2 回答 2

1

有几个问题,首先您</a>在示例中缺少关闭锚标记。在您的正则表达式中,您需要转义任何/字符,以便它们看起来像\/. 您的string.replace陈述似乎缺少搜索内容部分,请参阅 java 手册

描述

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

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

在此处输入图像描述

团体

组 0 将具有从打开标签到关闭标签的整个锚标签

  1. 将具有单引号或双引号类型,这用于\1验证您具有正确的关闭字符和title属性值
  2. 将具有单引号或双引号类型,这用于\2验证您具有正确的关闭字符和href属性值
  3. 将具有 href 属性值字符串,不包括引号
  4. 将字符串包裹在锚标记内

匹配示例

给定输入文本<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 组成的罕见边缘情况的风险,其中该表达式无法按预期工作,那么正则表达式可能适用于你

于 2013-06-15T03:47:30.497 回答
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

于 2013-06-15T03:15:54.120 回答