Scala 正则表达式在网页上查找 img src
Scala regex to find img src on a web page
我正在尝试使用 Scala 正则表达式在网页中查找 img
src
。
使用以下代码和模拟内容,我没有得到任何匹配项。我错过了什么?
def imgSrc(content: String) = {
val src = ".*<img[\w\s]+src\s*=\s*(\"\w+\")[\w\s]+/>.*".r
val formattedContent = content.replaceAll(lineSeparator, "")
(src findAllIn formattedContent).toList
}
测试用例:
"Method imgSrc" should "find src attributes of all img tags in mock web page" in {
val content = """<a href="#search" onclick="_gaq.push(['_trackPageview', '/search']);
return Manager.createHistoryAndLoad(true);">
<img src="ajaxsolr/images/centralRepository_logo.png" alt="The Central Repository" />
</a>"""
imgSrc(content) should contain("ajaxsolr/images/centralRepository_logo.png")
}
此外,如果能够在不删除换行符的情况下匹配多行输入,那就太好了。我阅读了 this and this 但无法正常工作。
注意:这只是一个学习练习。我知道并且普遍同意不应该使用正则表达式来解析 HTML.
这适用于您的输入:
scala> def imgSrc(content: String) = {
| val src = """(?s)<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>""".r
| src findAllMatchIn content map (_.group(1)) toList
| }
imgSrc: (content: String)List[String]
scala> imgSrc(content)
res13: List[String] = List(ajaxsolr/images/centralRepository_logo.png)
但我建议您使用一些普通的 HTML 解析器,例如 Jsoup:
val doc = Jsoup.parse(content);
val img = doc.select("img").first();
val src = img.attr("src");
我正在尝试使用 Scala 正则表达式在网页中查找 img
src
。
使用以下代码和模拟内容,我没有得到任何匹配项。我错过了什么?
def imgSrc(content: String) = {
val src = ".*<img[\w\s]+src\s*=\s*(\"\w+\")[\w\s]+/>.*".r
val formattedContent = content.replaceAll(lineSeparator, "")
(src findAllIn formattedContent).toList
}
测试用例:
"Method imgSrc" should "find src attributes of all img tags in mock web page" in {
val content = """<a href="#search" onclick="_gaq.push(['_trackPageview', '/search']);
return Manager.createHistoryAndLoad(true);">
<img src="ajaxsolr/images/centralRepository_logo.png" alt="The Central Repository" />
</a>"""
imgSrc(content) should contain("ajaxsolr/images/centralRepository_logo.png")
}
此外,如果能够在不删除换行符的情况下匹配多行输入,那就太好了。我阅读了 this and this 但无法正常工作。
注意:这只是一个学习练习。我知道并且普遍同意不应该使用正则表达式来解析 HTML.
这适用于您的输入:
scala> def imgSrc(content: String) = {
| val src = """(?s)<img\s[^>]*?src\s*=\s*['\"]([^'\"]*?)['\"][^>]*?>""".r
| src findAllMatchIn content map (_.group(1)) toList
| }
imgSrc: (content: String)List[String]
scala> imgSrc(content)
res13: List[String] = List(ajaxsolr/images/centralRepository_logo.png)
但我建议您使用一些普通的 HTML 解析器,例如 Jsoup:
val doc = Jsoup.parse(content);
val img = doc.select("img").first();
val src = img.attr("src");