我正在尝试在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具体的
答案 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')