0

以下のような文字列があります。

<br><br><br><br><br>  SomeHtmlString  <br><br><br><br><br>

SomeHtmlStringの中間のbrタグを保持するtrim関数のようなbrタグを削除したいと思います。これをすぐに行う機能はありますか?

例えば

<br><br><br>test1<br><br>test2<br><br><br><br>

test1<br><br>test2
4

4 に答える 4

2

正規表現を使った方法です。一度に1 つだけ一致
し、文字列の先頭または末尾のいずれかに置き換えます。

NSMutableString *replaceMe = [[NSMutableString alloc ]
             initWithString:@"<br><br > <br >  test<br>test2<br><br>"];
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:@"^ *<br *> *"
           options:NSRegularExpressionCaseInsensitive
           error:&error];
do {
    ;
} while ([regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""] != 0);

regex = [NSRegularExpression 
           regularExpressionWithPattern:@" *<br *> *$"
           options:NSRegularExpressionCaseInsensitive
           error:&error];
do {
    ;
} while ([regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""] != 0);

NSLog(@"string=%@", replaceMe);

そしてそれはにストリップ"<br><br > <br > test<br>test2<br><br>"ダウンしtest<br>test2ます。これはおそらく最も適切な解決策ではありませんが、たとえば、さまざまな空白を使用して、さまざまな式に一致するように変更するのは非常に簡単です。

正規表現を使用して<br>、一度に複数の に一致させることもできます。

NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"^ *(<br *> *)+"
    options:NSRegularExpressionCaseInsensitive
    error:&error];
[regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""];
NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@" *(<br *> *)+$"
    options:NSRegularExpressionCaseInsensitive
    error:&error];
[regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""];

これはループを回避しますが、変更が少し難しくなります。

于 2012-12-10T15:13:50.857 に答える
0

あなたはこれを行うことができます:

NSString* htmlString= @"<br><br><br><br><br>  SomeHtmlString  <br><br><br><br><br>";
NSString* pureString= [htmlString stringByReplacingOccurrencesOfString: @"<br>" withString: @""];

したがって、pureString に @" SomeHtmlString " が含まれます。

于 2012-12-10T14:47:58.887 に答える
0

これを使用して、不要なビットを取り除くことができます。

[yourString stringByReplacingOccurrencesOfString:@"<br>" withString:@""];

次に、次のようなものを使用して、文字列を希望どおりに再作成します。

NSString *newString = [NSString stringWithFormat:@"<br>%@<br>", yourString];

stringByTrimmingCharactersInSet も参照してください。

NSString でできることはたくさんあります。クラス リファレンスを確認してください: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

編集:

substringToIndex: ここであなたの友達になることができます. これを行うと、文字列の最初の 4 文字が削除したい文字で構成されているかどうかを確認できます。

NSString *subString = [yourString substringToIndex:4];
if ([subString isEqualToString:@"<br>"]) {
    yourString = [yourString substringFromIndex:4];
}

次に、これらの 4 文字を含まない新しい文字列を作成しています。最初の 4 文字が削除したい文字と等しくなくなるまで、これを続けます。

substringFromIndex を使用して、文字列の最後で同様のことを行うことができます。部分文字列が範囲外にならないように、元の文字列の長さを知る必要があります。

于 2012-12-10T14:57:16.587 に答える
0

代替の正規表現の表現:

NSString *input = @"<br><br><br><br><br><br>test<br>test2<br><br><br><br><br><br><br><br><br><br>";
__block NSString *output;

NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(<br>)*(.*?)(<br>)*$"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

[regex enumerateMatchesInString:input
                        options:0
                          range:NSMakeRange(0, [input length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

                         NSRange matchRange = [result rangeAtIndex:2];

                         output = [input substringWithRange:matchRange];
                     }];

if (output)
    NSLog(@"Found: %@", output);
于 2012-12-10T15:36:55.853 に答える