我需要匹配一些運算符:=,!=,>,<,< =,> = 我需要匹配的字符串可能類似於:「2 = 2 OR 33> = 32 AND 3 < 5"正則表達式幫助匹配運算符
什麼可以是正則表達式匹配表達式這一點,知道 - 我不希望收到一個‘< =’操作 一個‘=’匹配 - 的運營商可能會或可能不會有周圍的空間
在此先感謝! 亞歷
我需要匹配一些運算符:=,!=,>,<,< =,> = 我需要匹配的字符串可能類似於:「2 = 2 OR 33> = 32 AND 3 < 5"正則表達式幫助匹配運算符
什麼可以是正則表達式匹配表達式這一點,知道 - 我不希望收到一個‘< =’操作 一個‘=’匹配 - 的運營商可能會或可能不會有周圍的空間
在此先感謝! 亞歷
這似乎工作:
[<>!]?=|[<>]
這需要:<
,>
或!
=
(或只是=
)之前,
OR:<
或>
它們對。
這就是說,對於更多的複雜性,你可能需要一個解析器(例如,如果你想支持括號)
你是否也試圖獲得數字?如果是的話。 。 。
/[0-9]+[ ]*(<=|>=|!=|=|>|<)[ ]*[0-9]+/
...在0-9一次或多次的範圍內什麼,其次是0或多個空格,然後你的運營商,0或多個空格以及任何在0-9的一個或多個範圍倍。
這將讓數和操作
在這裏,你會得到另一個問題集:該數字可以是負數,有小數位等 – 2010-02-02 12:45:38
真的,在這種情況下,最好重寫正則表達式來匹配它。我總是覺得最好是最完整的。如果你正在尋找複雜的,真實的,整數,整數或其他類型的數字,你應該編寫正則表達式來匹配,而不是讓它模棱兩可,以後可能會遇到麻煩。 – Toymakerii 2010-02-02 14:10:31
不,我只是爲了識別操作符及其左右操作數和聚合操作符(如果有的話)(AND/OR)。 在我的例子中,我只寫了數字,但我的操作數可以是任何有效的C#編譯器成功編譯,這是從簡單的CLR類型到複雜的自定義類型。 所以我不介意用戶編寫的操作數是什麼,只要它編譯和評估對我來說很好。 – AlexCode 2010-02-02 14:46:42
[^?!><=]+\s*(?<operator>[><!]?=|[><])\s*[^?!><=]+
+ ExplicitCapture
過濾器>>
或===
或== ==
在搜索運算符之前,我首先通過邏輯運算符(AND/OR)拆分表達式。每個邏輯運算符之間只能有一個規則條件(左操作數,右操作數,右操作數)。 因此,如果在邏輯運算符之間找到多於一個運算符,解析器將自動拋出「無效的Empression」異常。 這樣我就不需要對RegEx模式執行任何驗證。 – AlexCode 2010-02-02 14:57:44
我在想,我可能需要執行一個驗證壽命...我需要跳過引號之間的運算符。如果一個操作數是一個包含操作符的字符串,可能會發生這種情況,例如:「Alex」=「
如果您的操作數包含引號,則需要檢查它們是否關閉。 – serhio 2010-02-02 15:37:29
你會最終會解析表達式與他們(嵌套)括號? – 2010-02-02 11:49:27
我正在評估這些表達式,並且它可以是c#編譯器可以理解的任何東西。 這將成爲規則引擎的一部分,可以接受2種表達類型,c#和僞代碼。 僞代碼可以讓你設計你的規則很像TFS查詢生成器,但是如果你需要更快,預編譯和更復雜的規則,你需要用c#編寫它們。 這個表達式將用於去除僞代碼表達式,但是括號和組運算符(AND/OR)的評估順序將留給c#編譯器來處理:) – AlexCode 2010-02-02 12:23:30
如果'Left/Right Operand'包含引號,你需要檢查他們是否關閉。 – serhio 2010-02-02 15:48:01