用于比较表达式的正则表达式
Regex for comparison expression
我需要匹配如下字符串:
( anything >= anything )
并且只有这些比较运算符才能存在:>= <= == != < > 而且它们只能存在一次。
我有的是:
^\(.+(>=|<=|>|<|==|!=).+\)$
但它匹配诸如 >=!= 之类的东西。
我确实浏览了 Whosebug 问题并进行了谷歌搜索,但找不到正确的解决方案。
你能帮我解决一下吗?
像 ^\(\s*[a-zA-Z0-9_+\-\/* ]+\s*(>=|<=|>|<|==|!=)\s*[a-zA-Z0-9_+\-\/* ]+\s*\)$
这样的正则表达式应该可以解决问题,对吧?
您可以使用以下内容:
^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$
解释:
((?!(>=|<=|>|<|==|!=)).)+
除 (>=|<=|>|<|==|!=)
以外的任何字符
\s+(>=|<=|>|<|==|!=)\s+
运算符之一后跟
((?!(>=|<=|>|<|==|!=)).)+
除 (>=|<=|>|<|==|!=)
以外的任何字符
如果您还打算捕获像 (myName == "Денис")
这样的字符串,则需要使用以下正则表达式:
^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$
参见 demo on Regexstorm(支持 .NET 正则表达式风格,不同于 regex101.com)
根据 http://regexhero.net, due to the use of atomic grouping ((?> ... )
), character classes ([<>=]
) 和惰性匹配 (*?
) 的测试结果,它比 Karthik Manchala 的建议要快得多。此外,如果 space 在 ==
运算符之前或之后丢失,我的正则表达式仍将捕获表达式。
使用 (?m)^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$
我的正则表达式每秒产生 15,783 次迭代,而 Karthik 的
(?m)^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$
产生每秒 9,204 次迭代的速度。
我需要匹配如下字符串:
( anything >= anything )
并且只有这些比较运算符才能存在:>= <= == != < > 而且它们只能存在一次。 我有的是:
^\(.+(>=|<=|>|<|==|!=).+\)$
但它匹配诸如 >=!= 之类的东西。 我确实浏览了 Whosebug 问题并进行了谷歌搜索,但找不到正确的解决方案。
你能帮我解决一下吗?
像 ^\(\s*[a-zA-Z0-9_+\-\/* ]+\s*(>=|<=|>|<|==|!=)\s*[a-zA-Z0-9_+\-\/* ]+\s*\)$
这样的正则表达式应该可以解决问题,对吧?
您可以使用以下内容:
^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$
解释:
((?!(>=|<=|>|<|==|!=)).)+
除(>=|<=|>|<|==|!=)
以外的任何字符
\s+(>=|<=|>|<|==|!=)\s+
运算符之一后跟((?!(>=|<=|>|<|==|!=)).)+
除(>=|<=|>|<|==|!=)
以外的任何字符
如果您还打算捕获像 (myName == "Денис")
这样的字符串,则需要使用以下正则表达式:
^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$
参见 demo on Regexstorm(支持 .NET 正则表达式风格,不同于 regex101.com)
根据 http://regexhero.net, due to the use of atomic grouping ((?> ... )
), character classes ([<>=]
) 和惰性匹配 (*?
) 的测试结果,它比 Karthik Manchala 的建议要快得多。此外,如果 space 在 ==
运算符之前或之后丢失,我的正则表达式仍将捕获表达式。
使用 (?m)^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$
我的正则表达式每秒产生 15,783 次迭代,而 Karthik 的
(?m)^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$
产生每秒 9,204 次迭代的速度。