查找iOS

时间:2015-06-11 17:50:10

标签: html ios regex nsregularexpression

我有一个庞大的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:

enter image description here

使用以下模式我尝试获取它们,但返回零件:

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

我尝试了不同的转义,但收到错误:

enter image description here

  

字符串文字可以包含以下特殊字符:转义的特殊字符\ 0(空字符),\(反斜杠),\ t(水平制表符),\ n(换行符),\ r \ n(回车符),\ “(双引号)和\'(单引号)

doc

1 个答案:

答案 0 :(得分:3)

您正在使用转发/这是一个特殊字符,因此您必须使用\/反斜杠转义它:

let pattern = "<article class=\"box-product-big box-product-full clearfix\">[\\S\\s]*?<\/article>"
                                                  Escape slash with backslash ---------^

引用 documentation

  

正则表达式元字符

     

必须引用作为文字处理的字符是 *? + [(){} ^ $ | \。 /

enter image description here

顺便说一下,你可以这样缩短你的正则表达式:

<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>)