【问题标题】:Use regex to evalue string for repeated section使用正则表达式评估重复部分的字符串
【发布时间】:2012-07-01 05:54:24
【问题描述】:

我还没有在 Objective-c 中使用过正则表达式。我现在要做的是评估一个字符串,看看它是否包含 4 或 5 个字符的重复模式 - 任何模式都没有关系。例如,像@"testA54RqA54Rq" 这样的字符串会从正则表达式返回一个真值,而像@"testA54Rq" 这样的字符串不会。现在我只是生成所有可能的 4 和 5 个字符的子字符串并将它们相互匹配,但显然这是非常低效的。我在哪里可以找到一些关于如何开始在 Objective C 中使用正则表达式的资源?如果有人在一个小例子之前遇到过这种情况会很好。

-编辑-

我也想要像@"testQWEr30BKRe40" 这样的东西返回 true(4 个字母后跟 2 个数字的模式)。我不确定这是否可能。

【问题讨论】:

  • 它们的工作方式与其他语言相同。您使用 NSPredicate 或 (iOS >= 4.0, OS X >= 10.7) NSRegularExpression。详情请参阅Predicate Programming Guide

标签: objective-c ios regex nsstring


【解决方案1】:

你可能想看看:

https://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

我认为实际的正则表达式只是:(\\w{4,5})\\1


NSString *regexStr = @"(\\w{4,5})\\1"; 
NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:&error]; 
if ((regex==nil) && (error!=nil)) {
  warn( @"Regex failed for: %@, error was: %@", string, error); 
} else {

}

【讨论】:

  • 感谢您的快速回答。我在NSRegularExpression 中调用什么方法来评估字符串并返回bool 值?
【解决方案2】:

对于确切的模式,您将能够使用正则表达式 (.{4,5})\\1 进行此类验证

如果你想做类别模式,比如4个字母后跟2个数字,那么你必须:

  1. 用一个不变的字母替换所有字母(例如用X替换[a-zA-Z]
  2. 用一个常数替换所有数字(例如用0替换\\d
  3. 使用与上所示相同的正则表达式验证此类修改后的输入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2017-07-16
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多