1

imgタグを閉じることに関するこの質問と回答を見ました。

ただし、リンクなどの他のタグも閉じたい場合はどうすればよいですか?

書いてみました

(<img|link[^>]+)(?<!/)>

しかし、それは機能しません

なにが問題ですか?

例:

<link href="myhref">
<img src="mysrc">

だがしかし

<link href="myhref"/>
<img src="mysrc"/>
4

3 に答える 3

3

あなたはあなたの交代の範囲を制限する必要があります。それ以外の場合<は、交互の左側の部分が[^>]+一致する場合にのみ一致し、右側の部分が一致する場合にのみ一致します。

(<(?:img|link)[^>]+)(?<!/)>

この問題を修正する必要があります。(?:...)非キャプチャグループです。つまり、キャプチャではなく、グループ化にのみ使用されます。置換操作(with \1/>)は同じままです。

于 2013-01-01T14:33:09.703 に答える
1

HTMLパーサーまたはlibxml2ベースのパーサーを使用する必要があります。hppleと呼ばれるobjective-cのlibxml2ラッパーがあります。hppleは、乱雑なHTMLを問題なく解析できます。

于 2013-01-01T14:14:43.360 に答える
1

KissXMLはそれを解析できるはずです...
libxml2をxmlモードでラップしますが、htmlモードにフォールバックします!

  • options:NSXMLDocumentTidyHTMLを渡すと、CTidyも呼び出されます

それはうまくいきます:D本当に(私が言い続けているように;))

- (void)processNode:(DDXMLNode*)node {
if(node.kind==DDXMLElementKind) {
    NSLog(@"%@", node.name);
    for (id child in node.children) {
        [self processNode:child];
    }
}
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
id sample = @"<link href=\"myhref\"><img src=\"mysrc\">";
id data = [sample dataUsingEncoding:NSUTF8StringEncoding];
DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:data options:DDXMLDocumentTidyHTML error:nil];
[self processNode:doc.rootElement];
}
于 2013-01-01T14:35:31.250 に答える