为什么 NSScanner 找不到第一次出现的目标字符串?

Why is NSScanner not finding the 1st occurrence of the target string?

我有一个正在运行的 Obj-c 应用程序;现在不是了。这是我要解析的字符串部分:

<div class="PostContent"><div class="Article"><div class="Post"><div class="PostContent"> <div><img style="background-image: url('http://cdn.openisbn.com/images/no_book_cover.jpg');border: solid 1px #383c40; " src=/cover/0345377443_220.jpg width=220 border=0 title="Women Who Run With The Wolves: Myths And Stories Of The Wild Woman Archetype"></div>Authors: <a href="/author/Clarissa_Pinkola_Estes/">Clarissa Pinkola Estes</a><BR>Publisher: <a href="/publisher/Ballantine_Books/">Ballantine Books</a>

数千个字符后,出现以下文字:

<div class="block" id="LayoutColumn_3"><div class="blockTop"></div><h2</h2><div align="center"><a href="/isbn/006251380X/" ><img style="padding:1px;border:1px solid #6c6c6c; background-image: url('http://cdn.openisbn.com/images/no_book_cover.jpg');" src=/cover/006251380X_72.jpg width=72 height=114 border=0 title="The Faithful Gardener: A Wise Tale About That Which Can Never Die"></a><BR><a href="/isbn/006251380X/" >The Faithful Gardener: A Wise Tale About That Which Can Never Die</a><BR><a href="/isbn/1604076356/" ><img style="padding:1px;border:1px solid #6c6c6c; background-image: url('http://cdn.openisbn.com/images/no_book_cover.jpg');"

这是我查找标题的代码:

[scanner setScanLocation:0];
[scanner setCaseSensitive:NO];
[scanner scanUpToString:@" border=0 title=\"" intoString:nil];  //  title
scanner.scanLocation += 17;
[scanner scanUpToString:@"\">" intoString:&tempString];
oTitle.text = tempString;

发生的事情是它跳过目标字符串的第一次出现 (Women Who 运行...) 并找到第二次出现 (T他忠实的加德纳 ) 和 returns 它而不是第一个。因为这曾经有效,而且我没有更改代码,有人可以告诉我为什么这不起作用,并可能建议对代码进行一些更改以使其再次工作吗?非常感谢!

它没有找到第一次出现的原因是该特定实例似乎在 border=0title="..." 之间有两个 space:

<img style="..." src=... width=220  border=0  title="Women Who Run With ...">

您的扫描仪正在查找只有一个 space.

的字符串

就我个人而言,我建议考虑使用 HTML 解析器。第一次使用它时有点令人生畏,但它是一种极其强大和灵活的解析 HTML 方法,可以让您摆脱对输入进行逐字符扫描的繁琐工作。它正是为这类问题而设计的。参见 TFHpple or the Ray Wenderlich tutorial on how to parse HTML