使用正则表达式为重复的部分评估字符串

时间:2012-06-29 17:20:43

标签: objective-c ios regex nsstring

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

- 编辑 -

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

2 个答案:

答案 0 :(得分:2)

你可能想看看:

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 {

}

答案 1 :(得分:1)

对于精确模式,您可以使用正则表达式(.{4,5})\\1

进行此类验证

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

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