2015-05-07 161 views
2

我需要匹配類似下面的字符串:正則表達式比較表達式

(anything >= anything) 

而且只能由這些比較運算符:> = < = == = <>他們可以在那裏只有一次! 我所擁有的是:

^\(.+(>=|<=|>|<|==|!=).+\)$ 

但是它匹配的東西一樣> = =等等! 我沒有看通過stackoverflow的問題和谷歌搜索,但無法找到正確的解決方案。

請你幫我一下嗎?

回答

1

^\(\s*[a-zA-Z0-9_+\-\/* ]+\s*(>=|<=|>|<|==|!=)\s*[a-zA-Z0-9_+\-\/* ]+\s*\)$這樣的正則表達式應該可以做到這一點,對吧?

A Regex101 with it in action can be found here.

+0

我很害怕,不會......通過「任何東西」我的意思是它也可以如下所示:(a + b> = a - g [i,j + d]) –

+0

啊,我明白了。我相應地編輯了我的帖子。 – GrandonBroseph

+0

太神奇了,謝謝! –

1

您可以使用以下方法:

^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$ 

說明:

  • ((?!(>=|<=|>|<|==|!=)).)+任何其他比(>=|<=|>|<|==|!=)
  • \s+(>=|<=|>|<|==|!=)\s+運營商遵循的一個字符由
  • ((?!(>=|<=|>|<|==|!=)).)+(>=|<=|>|<|==|!=)
2

其他任何字符如果您也打算也捕獲串像(myName == "Денис"),你需要使用正則表達式如下:

^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$ 

demo on Regexstorm(支持.NET正則表達式的味道,不像

由於使用atomic grouping(?> ...)),它比Karthik Manchala的建議快得多,因爲根據http://regexhero.net的測試結果),character classes[<>=])和延遲匹配(*?)。此外,如果==運算符前後缺少空格,則我的正則表達式仍將捕獲該表達式。

使用(?m)^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$我的正則表達式每秒產生15,783次迭代,Karthik的 (?m)^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$產生每秒9,204次迭代速度。