我想更改 HTML 字符串中的字体大小,我必须是 其大小的一半。

例如。

<div style="font-family:'Arial';font-size:43px;color:#ffffff;">


<div style="font-family:'Arial';font-size:21.5px;color:#ffffff;">


<div style="font-size:12px;">


<div style="font-size:6px;">

我怎样才能用 NSRegularExpression 做到这一点?

请注意,12 和 6 以及 43 和 21.5 只是示例。我需要正则表达式,因为它必须是不同字体大小的通用解决方案

最佳答案

我有点不愿意使用正则表达式给出答案,因为已经反复说明用正则表达式解析 HTML 被认为是有害的、不可能的、对你的头脑有危险等。所有这些都是正确的,这不是我的意图任何不同。

但即使在所有这些警告之后,OP 也明确要求提供正则表达式解决方案,因此我将分享此代码。作为如何通过循环正则表达式的所有匹配项来修改字符串的示例,它至少是有用的。

NSString *htmlString =
    @"<div style=\"font-family:'Arial';font-size:43px;color:#ffffff;\">\n"
    @"<div style=\"font-size:12px;\">\n";

NSRegularExpression *regex;
regex = [NSRegularExpression regularExpressionWithPattern:@"font-size:([0-9]+)px;"
                                                  options:0
                                                    error:NULL];

NSMutableString *modifiedHtmlString = [htmlString mutableCopy];
__block int offset = 0;
[regex enumerateMatchesInString:htmlString
                        options:0
                          range:NSMakeRange(0, [htmlString length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                         // range = location of the regex capture group "([0-9]+)" in htmlString:
                         NSRange range = [result rangeAtIndex:1];
                         // Adjust location for modifiedHtmlString:
                         range.location += offset;
                         // Get old point size:
                         NSString *oldPointSize = [modifiedHtmlString substringWithRange:range];
                         // Compute new point size:
                         NSString *newPointSize = [NSString stringWithFormat:@"%.1f", [oldPointSize floatValue]/2];
                         // Replace point size in modifiedHtmlString:
                         [modifiedHtmlString replaceCharactersInRange:range withString:newPointSize];
                         // Update offset:
                         offset += [newPointSize length] - [oldPointSize length];
                     }
 ];

NSLog(@"%@", modifiedHtmlString);

输出:
<div style="font-family:'Arial';font-size:21.5px;color:#ffffff;">
<div style="font-size:6.0px;">

关于objective-c - NSRegularExpression 与算术,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14023429/

10-10 20:25