0

我正在开发一个 iOS 应用程序,我想查找和替换字符串中的内容。基本上,我想同时删除 HTML 标记和注释。

这是我的字符串:

<p>
  <!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]-->
</p>
<p>
  <!--[if gte mso 10]><mce:style><!<br />/* Style Definitions */<br />table.MsoNormalTable<br /> {mso-style-name:"Tableau Normal";<br /> mso-tstyle-rowband-size:0;<br /> mso-tstyle-colband-size:0;<br /> mso-style-noshow:yes;<br /> mso-style-parent:"";<br /> mso-padding-alt:0cm 5.4pt 0cm 5.4pt;<br /> mso-para-margin:0cm;<br /> mso-para-margin-bottom:.0001pt;<br /> mso-pagination:widow-orphan;<br /> font-size:10.0pt;<br /> font-family:"Times New Roman";<br /> mso-ansi-language:#0400;<br /> mso-fareast-language:#0400;<br /> mso-bidi-language:#0400;}<br />--><!--[endif]-->
</p>

这是我的一段代码,试图同时删除 HTML 注释和 HTML 标签:

-(NSString *) stringByStrippingHTML: (NSString*) str
{
    NSString *s = str;
    NSError *err = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<!--(.*?)-->|<div[^>]+>(.*?)</div>|<[^>]+>"
                                                                           options:0
                                                                             error:&err];

    NSString *result = [regex stringByReplacingMatchesInString:s
                                                       options:0
                                                         range:NSMakeRange(0, s.length)
                                                  withTemplate:@""];

    return result;
}

我的问题是我不应该得到任何东西,但这就是我得到的:

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
--> 

两个<p>标签之间的第一个注释被正确删除,但第二个不想消失......我试图在许多正则表达式在线测试仪上查看结果,看来我的正则表达式是正确的。那么,你们中的任何人都可以告诉我我的问题来自哪里吗?

我在第二条评论中注意到了一个<!,但我真的不知道它是否来自这里......

非常感谢您的帮助 !

原谅我的英语,我是法国人:)

4

0 回答 0