我正在尝试在NSString中检测<br>
或<Br>
或< br>
,...并将其替换为\n
。
我用NSRegularExpression
编写了这段代码:
NSString *string = @"123 < br><br>1245; Ross <Br>Test 12<br>";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<[* ](br|BR|bR|Br|br)>" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"\n"];
NSLog(@"%@", modifiedString);
它工作正常,但它只替换第一个匹配,而不是替换所有匹配。请帮我检测所有匹配并替换它们。 感谢
答案 0 :(得分:2)
您目前无法处理任意数量的空白区域。为了更好地衡量,您还应该在br
之后处理空格并处理结束斜杠,因为<br />
是在HTML中编写换行符的正确方法。
你最终会得到一个看起来像这样的模式
<\s*(br|BR|bR|Br|br)\s*\/*>
或写为NSRegularExpression
NSError *error = NULL;
NSRegularExpression *regex =
[NSRegularExpression regularExpressionWithPattern:@"<\\s*(br|BR|bR|Br|br)\\s*\\/*>"
options:0
error:&error];
您还可以通过分隔两个字母来使图案更紧凑
<\s*([bB][rR])\s*\/*>
答案 1 :(得分:1)
你已经关闭了,你需要让它在你的初始<
之后处理任意数量的空格,如果它根本没有任何空间就处理它。
使用example,您可以使用正则表达式<\s*(br|BR|bR|Br|br)>
让它在您的BR工作之前接受0 to N
个空格。您还可以通过i
使其不区分大小写来简化它,这样可以使用更清晰的正则表达式来处理您将看到的BR
上的所有变体。 To do that,使用(?i)<\s*br>
。
我认为为了完整性,您还可以在br
之后包含任意数量的空间,以便处理任何可能抛出的内容。我同意为/>
添加某种类型的catch以结束模式,因为<br/>
也是有效的HTML。它使正则表达式看起来更crazy,但它归结为仅添加其他3个。
(?i)<\s*br\s*\/?\s*>
它看起来非常可怕,但很简单地分解为几个部分:
(?i)
打开不区分大小写以处理br
上的变体。 <\s*
是标记的开头,后面跟着任意数量的空格。br\s*
是您的br
字符,后跟任意数量的空格。\/?
用于处理结束斜杠的0或1个实例(用于处理HTML <br/>
和<br>
等HTML有效标记。\s*>
处理任意数量的空格,然后关闭>
。