如何通过外观来否定正则表达式

时间:2014-06-25 20:48:49

标签: objective-c regex sqlite regex-negation

我有一个正则表达式

(?<=@)'|'(?=%)

它成功匹配此objective-c字符串

中位于%@周围的任何撇号
@"UPDATE RESTAURANTS SET CITY='%@', NAME='%@' ", city, @"Joy's Restaurant";

但是我想要相反的事情来匹配任何不在%@附近的撇号,即只匹配本例中Joy's Restaurant中的撇号。

任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:3)

否定的外观非常简单。使用(?!…)进行否定预测,使用(?<!…)进行负面预测。例如:

(?<!@)'(?!%)

只要不是@之前没有匹配任何撇号,就不会匹配%。请注意,您必须删除替换(|),以确保满足两个外观。

答案 1 :(得分:2)

使用负面反对负面预测

(?<!@)'(?!%)

Live Demo

或者,你可以在上下文中使用交替运算符,将你要排除的内容放在左边,(说扔掉它,它是垃圾)并在捕获组中放置你想要匹配的内容右边。

'%@'|(')

Live Demo