2010-02-26 70 views
4

我试图建立一个满足比较像这样的正则表达式:如何搭配比较运营商正则表达式

= 445 
> 5 
>= 22 
< 3 
<= 42 
<> 10 

我认为这会工作,但不会:

[=|>|<|>=|<|<=|<>]\s\d+ 

'>'或'<'在'='之前是非常重要的。这些运营商将无效:

=< 
=> 
>> 
<< 
== 

我用这个来创建一些动态的SQL,所以比较运算符需要有效的SQL。

有什么建议吗?

回答

3
(=|>|<|>=|<|<=|<>)\s\d+ 

或类似的东西: - >当您使用[

[=><]{1,2}\s\d+ 

(并没有真正做你想做的,它= <的所有2character组合>,但清晰一致) ]这意味着,应该发生一个内部字符(多个|可能导致未定义的行为,或我不知道的行为)

- >您可能想使用简单的大括号() | |具有'OR'含义。

+0

第二个正则表达式匹配=>,==和= <。 – EmFi 2010-02-26 18:38:16

+0

您应该补充说第二个版本只是一个近似值,并且匹配><和==之类的东西。 – Frank 2010-02-26 18:39:13

+0

请注意,第二个匹配一些东西,第一个没有。例如:== >><< >< =< => – 2010-02-26 18:39:15

2

语法[…]表示一个字符类。使用(…)的,而不是分组:

(=|>|<|>=|<|<=|<>)\s\d+ 

这里还有一个更紧凑的一个:

(=|[<>]=?|<>)\s\d+ 

或者:

(=|<[>=]?|>=?)\s\d+ 
0

这人会做你要找的东西。

(<[=>]?|=|>=?)\s\d+ 
+0

太可怕了!比APL更糟! – martinwguy 2010-02-26 18:52:24

4

我会说EmFi给出的正则表达式已经足够好了。有一些修改可能需要表达这样

"currentDate>=2012/11/07&&currentDate<=2012/11/08"; 

或本

"currentDate==2012/11/07"; 

通过这种改进的正则表达式

(<[=>]?|==|>=?|\&\&|\|\|) 

,并给它为 “有效”。也许很简单,但在我的情况下,至少,足以

编辑: 正则表达式,是为了采取比较操作(<,>,> =,< =,= =)和布尔运算符(修改& &,| |)以类似于C语言的方式

+0

问题是匹配而不是分裂。你能否更新答案,以便解决匹配给定比较字符串的问题? – acj 2012-11-15 03:40:25

0

刚刚解决了这个问题。它匹配<,>,< =,> =,!=,=,<>而不是=>或= <不幸的是它仍然匹配>>。我只是在我的应用程序代码中检查。

([!<>])?([=>])?(?!<) 
0

我现在IM万岁老的文章,但,我已经取得了正则表达式女巫是大小写敏感的,只查找我们所需要的,我希望它帮助别人。

它的作品为!=,< =,> =,==,<,>并且只在字符串的开始处找到它。

^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)?