Objective-C正则表达式单引号和双引号

时间:2014-03-28 11:04:27

标签: objective-c regex

我正在尝试在obj-c中设计一个正则表达式来匹配以下任何jquery类型的语句

$(body)
$('.body')
$("bo-dy")

我遇到的问题是,只要主题包含单引号或双引号,obj-c似乎就会失败

"\\$\\([a-zA-Z0-9_#-\\.'\"]+\\)"

从上面......

$(test) <- success
$(.d-s3#_t) <- success 
$('test') <- fail
$("test) <- fail

奇怪地包括撇号与单引号char意味着如果单引号是第一次也是唯一一次出现的话,它确实提供匹配!

"\\$\\([a-zA-Z0-9_#-\\.‘'\"]+\\)"

$('test) <- success
$('test') <- fail

有没有人在这里有任何见解?我已经尝试了我能想到的每一种逃避策略,并将其简化为简单的正则表达式,例如

"[_‘'\"]"

具有相同的结果。它在其他语言平台上运行良好,所以看起来似乎是obj-c具体的

1 个答案:

答案 0 :(得分:1)

您需要转义所有双引号,例如:

[NSRegularExpression regularExpressionWithPattern:@"(\"bo-dy\")" ...

单引号不应该转义:

[NSRegularExpression regularExpressionWithPattern:@"\\('test'\\)" ...

请注意,上述代替抓取组,我将( )转义为与括号匹配。这是另一个简单的例子;这将匹配您的所有字符串:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"([$\\-\\(\\w\"'\\.\\)\\\\]*)" options:NSRegularExpressionCaseInsensitive | NSRegularExpressionAllowCommentsAndWhitespace error:&error];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:searchText options:0 range:NSMakeRange(0, [string length])];

结果:

$(body)
$('.body')
$("bo-dy")
$('test')\n
$(body)
$('.body')
$("bo-dy")
$(test)
$(.d-s3#_t)
$('test')
$("test)
$('test)
$('test')