Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 什么';这个Objective-C正则表达式有什么问题?_Ios_Objective C_Regex_Nsattributedstring_Nsmutableattributedstring - Fatal编程技术网

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 of
NSRegularExpression
。谢谢。你知道我在做正则表达式测试后如何去掉星号吗?我只想把这个词变成蓝色。不应显示星号。我无法通过在goodText上替换OccurrencesofString来执行stringByReplacingOccurrencesOfString,因为它是一个NSMutableAttributedString.P.S。在这种情况下,
并不意味着“可选”,而是意味着“非贪婪”对吗?这是有效的。但是如果字符串是“你好*世界*你好*你怎么样”,“你好”也会变成蓝色。不,不会。代码的其余部分会这样做,因为您使用的是
rangeOfString
,它将返回第一个匹配的范围。如果要检索所有匹配,必须使用`matchesInString:options:range:`method of
NSRegularExpression
。谢谢。你知道我在做正则表达式测试后如何去掉星号吗?我只想把这个词变成蓝色。不应显示星号。我无法通过替换字符串的发生来执行字符串