通过Regex匹配给定字符串中的一串字符串

时间:2016-08-17 15:13:48

标签: ios objective-c regex

我有一个场景,我有一个看起来像 -

的字符串
"Lorem Ipsum is simply dummy text of the printing and typesetting industry. \n\nLorem Ipsum has been the industry's \n\nstandard dummy text ever since the 1500s.when an unknown printer took a galley of type and scrambled it to make a type specimen book." 

我想检索行"Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."并将其设为斜体。所以我将完整的句子嵌入如下的方括号中并创建一个正则表达式,并执行如下操作 -

我不想手动计算我这样做的范围。

"Lorem Ipsum is simply dummy text of the printing and typesetting industry. \n\n[Lorem Ipsum has been the industry's \n\nstandard dummy text ever since the 1500s].when an unknown printer took a galley of type and scrambled it to make a type specimen book."

并编写以下代码以便检索 -

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:NSRegularExpressionCaseInsensitive error:NULL];

    NSArray *myArray = [regex matchesInString:testString options:0 range:NSMakeRange(0, [testString length])] ;//testString is my concerned String

    NSMutableArray *matches = [NSMutableArray arrayWithCapacity:[myArray count]];

    for (NSTextCheckingResult *match in myArray) {
        NSRange matchRange = [match rangeAtIndex:1];
        [matches addObject:[testString substringWithRange:matchRange]];
        NSLog(@"%@", [matches lastObject]);
    }

现在,如果我没有使用任何新的行语法(即当我删除\ n时),我能够检索该块。但当\ n存在时,它不会检索相同的内容。

那么可能是什么问题。

1 个答案:

答案 0 :(得分:0)

不确定。


另见this帖子 如果以下选项不起作用,请将正则表达式更改为此 :@"\\[([\\S\\s]*?)\\]"

您真的不需要CaseInsensitive选项 因为你的正则表达式没有具体引用字母。

我认为默认值是点匹配任何字符,但换行符。

here 开始,这就是所谓的 Dot-All 选项。

DotMatchesLineSeparators

允许点匹配换行符。

由于它是枚举,因此可能需要将NSRegularExpressionOptions.附加到其中。