Ios 什么';这个Objective-C正则表达式有什么问题?
我正在尝试检测星号之间的任何单词:Ios 什么';这个Objective-C正则表达式有什么问题?,ios,objective-c,regex,nsattributedstring,nsmutableattributedstring,Ios,Objective C,Regex,Nsattributedstring,Nsmutableattributedstring,我正在尝试检测星号之间的任何单词: NSString *questionString = @"hello *world*"; NSMutableAttributedString *goodText = [[NSMutableAttributedString alloc] initWithString:questionString]; //should turn the word "world" blue NSRange range = [questionString rangeOfSt
NSString *questionString = @"hello *world*";
NSMutableAttributedString *goodText = [[NSMutableAttributedString alloc] initWithString:questionString]; //should turn the word "world" blue
NSRange range = [questionString rangeOfString:@"\\b\\*(.+?)\\*\\b" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location != NSNotFound) {
DLog(@"found a word within asterisks - this never happens");
[goodText addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range];
}
但我从来没有得到一个积极的结果。正则表达式怎么了
@"\\B\\*([^*]+)\\*\\B"
你应该达到你的期望
根据,必须使用\B
代替\B
作为单词边界
最后,使用[^*]+
匹配每对星号,而不是只匹配最外面的星号
例如,在字符串中
你好,世界,你好吗
它将正确匹配world
和are
,而不是world-how-are
另一种方法是使用?
,这将使+
不贪婪
@"\\B\\*(.+?)\\*\\B"
另外值得注意的是,
rangeOfString:options
返回第一个匹配的范围,而如果您对所有匹配感兴趣,则必须使用该模式构建一个NSRegularExpression
实例,并使用其MatchesInstalling:options:range:
方法
你应该达到你的期望
根据,必须使用\B
代替\B
作为单词边界
最后,使用[^*]+
匹配每对星号,而不是只匹配最外面的星号
例如,在字符串中
你好,世界,你好吗
它将正确匹配world
和are
,而不是world-how-are
另一种方法是使用?
,这将使+
不贪婪
@"\\B\\*(.+?)\\*\\B"
另外值得注意的是,
rangeOfString:options
返回第一个匹配的范围,而如果您对所有匹配感兴趣,则必须使用该模式构建一个NSRegularExpression
实例,并使用其MatchesInstalling:options:range:
方法
你应该达到你的期望
根据,必须使用\B
代替\B
作为单词边界
最后,使用[^*]+
匹配每对星号,而不是只匹配最外面的星号
例如,在字符串中
你好,世界,你好吗
它将正确匹配world
和are
,而不是world-how-are
另一种方法是使用?
,这将使+
不贪婪
@"\\B\\*(.+?)\\*\\B"
另外值得注意的是,
rangeOfString:options
返回第一个匹配的范围,而如果您对所有匹配感兴趣,则必须使用该模式构建一个NSRegularExpression
实例,并使用其MatchesInstalling:options:range:
方法
你应该达到你的期望
根据,必须使用\B
代替\B
作为单词边界
最后,使用[^*]+
匹配每对星号,而不是只匹配最外面的星号
例如,在字符串中
你好,世界,你好吗
它将正确匹配world
和are
,而不是world-how-are
另一种方法是使用?
,这将使+
不贪婪
@"\\B\\*(.+?)\\*\\B"
另外值得注意的是,
rangeOfsString:options
返回第一个匹配的范围,然而,如果您对所有匹配感兴趣,则必须使用该模式构建一个NSRegularExpression
实例,并使用其matcheString安装:选项:范围:
方法。什么是questionString?那里没有单词边界。尝试添加零个或多个空白字符的搜索。检查此链接,它会对您有所帮助。不用担心空格,但据我所知仍然没有单词边界。@manujmv我编辑了这个问题以显示questionString。什么是questionString?那里没有单词边界。尝试添加零个或多个空白字符的搜索。检查此链接,它会对您有所帮助。不用担心空格,但据我所知仍然没有单词边界。@manujmv我编辑了这个问题以显示questionString。什么是questionString?那里没有单词边界。尝试添加零个或多个空白字符的搜索。检查此链接,它会对您有所帮助。不用担心空格,但据我所知仍然没有单词边界。@manujmv我编辑了这个问题以显示questionString。什么是questionString?那里没有单词边界。尝试添加零个或多个空白字符的搜索。检查此链接,它会对您有所帮助。不用担心空格,但据我所知,仍然没有单词边界。@manujmv我编辑了这个问题以显示questionString。这很有效。但是如果字符串是“你好*世界*你好*你怎么样”,“你好”也会变成蓝色。不,不会。代码的其余部分会这样做,因为您使用的是rangeOfString
,它将返回第一个匹配的范围。如果要检索所有匹配,必须使用`matchesInString:options:range:`method ofNSRegularExpression
。谢谢。你知道我在做正则表达式测试后如何去掉星号吗?我只想把这个词变成蓝色。不应显示星号。我无法通过在goodText上替换OccurrencesofString来执行stringByReplacingOccurrencesOfString,因为它是一个NSMutableAttributedString.P.S。在这种情况下,?
并不意味着“可选”,而是意味着“非贪婪”对吗?这是有效的。但是如果字符串是“你好*世界*你好*你怎么样”,“你好”也会变成蓝色。不,不会。代码的其余部分会这样做,因为您使用的是rangeOfString
,它将返回第一个匹配的范围。如果要检索所有匹配,必须使用`matchesInString:options:range:`method ofNSRegularExpression
。谢谢。你知道我在做正则表达式测试后如何去掉星号吗?我只想把这个词变成蓝色。不应显示星号。我无法通过替换字符串的发生来执行字符串