2010-02-26 72 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萬歲老的文章,但,我已經取得了正則表達式女巫是大小寫敏感的,只查找我們所需要的,我希望它幫助別人。

它的作品爲!=,< =,> =,==,<,>並且只在字符串的開始處找到它。

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