【问题标题】:Why is my NSRegularExpression pattern not working?为什么我的 NSRegularExpression 模式不起作用?
【发布时间】:2013-12-06 12:13:07
【问题描述】:

我有以下字符串:

NSString *string = @"she seemed \x3cem\x3ereluctant\x3c/em\x3e to discuss the matter";

我希望最终的字符串是:"she seemed reluctant to discuss the matter"

我有以下模式:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"/\\x[0-9a-f]{2}/"
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];

NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult *match in matches) {
    NSRange matchRange = [match range];
    NSLog(@"%@", NSStringFromRange(matchRange));
}

但是,我收到一条错误消息,提示该模式无效。我做错了什么?

【问题讨论】:

  • 相当肯定 Objective C 不需要 // 分隔符,试试不带?
  • @r3mus 你的意思是像\\x[0-9a-f]{2}?还是不行:NSInvalidValue=\x[0-9a-f]{2}}
  • 即使\\x 也不起作用:NSInvalidValue=\x
  • 诚然不是在计算机上进行测试 - 但我认为 \x 是为 Unicode 保留的。也尝试转义\\\x

标签: objective-c regex nsregularexpression


【解决方案1】:

你需要的模式是:

@"\\\\x[0-9a-f]{2}"

反斜杠对于 Obj-C 和 RE 解析器都是特殊的 - 因此您需要创建一个带有两个 \' 的 Obj-C 字符串,这样 RE 解析器才能以一个结尾。

字符串中也没有打开/关闭分隔符 - 您正在考虑另一种编程语言!

【讨论】:

  • 非常感谢您的工作。现在说我有一个字符串emchair/em。需要什么模式才能只产生chair,即删除 em 和 /em?
  • 我怀疑您的评论丢失了一些字符...无论如何试一试,如果它无法正常工作,请询问另一个问题,说明您尝试了什么 - 并具体说明您要匹配的内容(只是椅子,任何开放标签/文本/关闭标签序列,您是否期望嵌套标签等)
【解决方案2】:

使用 NSString 方法可以省去一些正则表达式的麻烦

stringByReplacingOccurrencesOfString:withString:

或者

stringByReplacingOccurrencesOfString:withString:options:range:

【讨论】:

  • 如果有帮助,这些方法在后台使用相同的方法。
猜你喜欢
  • 2016-08-05
  • 2013-04-21
  • 2012-04-24
  • 1970-01-01
  • 2020-04-02
  • 2018-06-23
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多