所以我试图找出一个对我不起作用的正则表达式。我从来都不擅长写作,并希望有人能解释我在这里做错了什么。我正试图用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
,但它出现了错误。正如我所说,我对正则表达式很恐怖 - 我认为这个可能很简单,但我显然错了。我的问题在哪里?
谢谢你们!
答案 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>
组0将从开放标记中获取整个锚标记以关闭标记
\1
使用此类型来验证您是否具有title
属性值的正确结束字符\2
使用此类型来验证您是否具有href
属性值的正确结束字符给定输入文本<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