在 iOS 中查找所有 HTML 兄弟元素
Find all HTML sibling element in iOS
我有一个巨大的HTML,但是在某个级别有10个article
元素。我需要主题。
<article class="box-product-big box-product-full clearfix" >
<div class="list-left">
<div class="cover">
<a id="book_cover_3100529" href="/film/fritz_lang.m-egy-varos-keresi-a-gyilkost-dvd.html">
<img src="http://s06.static.libri.hu/cover/d4/3/1090228_3.jpg" alt="Fritz Lang - M- Egy város keresi a gyilkost - DVD"/>
</a>
</div>
<div class="desc">
<a class="book-title" href="/film/fritz_lang.m-egy-varos-keresi-a-gyilkost-dvd.html">
..
</article>
这是相关的DOM:
使用以下模式我尝试获取它们,但返回了零片:
var error: NSError?
let pattern = "<article class=\"box-product-big box-product-full clearfix\">[\S\s]*?</article>"
var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)!
if error != nil {
println(error)
}
let a = regex.matchesInString(str, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, count(str)))
知道哪里出了问题吗?
数据来自这里:http://www.libri.hu/talalati_lista/?text=m
我尝试了不同的转义,但出现错误:
String literals can include the following special characters: The escaped special characters [=16=] (null character), \ (backslash), \t (horizontal tab), \n (line feed), \r (carriage return), \" (double quote) and \' (single quote)
您使用的是正向 /
,这是一个特殊字符,因此您必须使用 \/
:
使用反斜杠将其转义
let pattern = "<article class=\"box-product-big box-product-full clearfix\">[\S\s]*?<\/article>"
Escape slash with backslash ---------^
引用 documentation:
Regular Expression Metacharacters
Characters that must be quoted to be treated as literals are * ? + [ ( ) { } ^ $ | \ . /
顺便说一句,您可以像这样缩短您的正则表达式:
<article[\S\s]*?<\/article>
代码
var error: NSError?
let pattern = "<article[\S\s]*?<\/article>"
var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)!
if error != nil {
println(error)
}
let a = regex.matchesInString(str, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, count(str)))
此外,您可以使用捕获组来捕获内容:
(<article[\S\s]*?<\/article>)
我有一个巨大的HTML,但是在某个级别有10个article
元素。我需要主题。
<article class="box-product-big box-product-full clearfix" >
<div class="list-left">
<div class="cover">
<a id="book_cover_3100529" href="/film/fritz_lang.m-egy-varos-keresi-a-gyilkost-dvd.html">
<img src="http://s06.static.libri.hu/cover/d4/3/1090228_3.jpg" alt="Fritz Lang - M- Egy város keresi a gyilkost - DVD"/>
</a>
</div>
<div class="desc">
<a class="book-title" href="/film/fritz_lang.m-egy-varos-keresi-a-gyilkost-dvd.html">
..
</article>
这是相关的DOM:
使用以下模式我尝试获取它们,但返回了零片:
var error: NSError?
let pattern = "<article class=\"box-product-big box-product-full clearfix\">[\S\s]*?</article>"
var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)!
if error != nil {
println(error)
}
let a = regex.matchesInString(str, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, count(str)))
知道哪里出了问题吗?
数据来自这里:http://www.libri.hu/talalati_lista/?text=m
我尝试了不同的转义,但出现错误:
String literals can include the following special characters: The escaped special characters [=16=] (null character), \ (backslash), \t (horizontal tab), \n (line feed), \r (carriage return), \" (double quote) and \' (single quote)
您使用的是正向 /
,这是一个特殊字符,因此您必须使用 \/
:
let pattern = "<article class=\"box-product-big box-product-full clearfix\">[\S\s]*?<\/article>"
Escape slash with backslash ---------^
引用 documentation:
Regular Expression Metacharacters
Characters that must be quoted to be treated as literals are * ? + [ ( ) { } ^ $ | \ . /
顺便说一句,您可以像这样缩短您的正则表达式:
<article[\S\s]*?<\/article>
代码
var error: NSError?
let pattern = "<article[\S\s]*?<\/article>"
var regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)!
if error != nil {
println(error)
}
let a = regex.matchesInString(str, options: NSMatchingOptions.ReportCompletion, range: NSMakeRange(0, count(str)))
此外,您可以使用捕获组来捕获内容:
(<article[\S\s]*?<\/article>)