我需要匹配以下字符串:
( anything >= anything )
并且只能通过这些比较运算符:> =< = ==!=< >他们只能在那里一次。 我所拥有的是:
^\(.+(>=|<=|>|<|==|!=).+\)$
但它匹配像&gt; =!=之类的东西。 我确实查看了stackoverflow问题并用Google搜索但找不到合适的解决方案。
你能帮帮我吗?
答案 0 :(得分:2)
如果您还计划捕获(myName == "Денис")
等字符串,则需要使用以下正则表达式:
^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$
请参阅demo on Regexstorm(支持.NET正则表达式,与regex101.com不同)
由于使用了http://regexhero.net((?> ... )
),atomic grouping,因此根据character classes的测试结果,比Karthik Manchala的建议要快得多( [<>=]
)和懒惰匹配(*?
)。此外,如果在==
运算符之前或之后缺少空格,我的正则表达式仍将捕获表达式。
使用(?m)^\((?>(?![<>=]=|!=|[<>]).)*?(?:[<>=]=|!=|[<>])(?>(?![<>=]=|!=|[<>]).)*?\)$
我的正则表达式每秒产生15,783次迭代,而Karthik&#39; s
(?m)^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$
每秒产生9,204次迭代速度。
答案 1 :(得分:1)
像^\(\s*[a-zA-Z0-9_+\-\/* ]+\s*(>=|<=|>|<|==|!=)\s*[a-zA-Z0-9_+\-\/* ]+\s*\)$
这样的正则表达式可以解决这个问题吧?
答案 2 :(得分:1)
您可以使用以下内容:
^\(((?!(>=|<=|>|<|==|!=)).)+\s+(>=|<=|>|<|==|!=)\s+((?!(>=|<=|>|<|==|!=)).)+\)$
说明:
((?!(>=|<=|>|<|==|!=)).)+
除(>=|<=|>|<|==|!=)
\s+(>=|<=|>|<|==|!=)\s+
其中一个运营商后跟((?!(>=|<=|>|<|==|!=)).)+
除(>=|<=|>|<|==|!=)