Pergunta

Estou tentando criar um regex que corresponda às comparações como esta:

= 445
> 5
>= 22
< 3
<= 42
<> 10

Eu pensei que isso funcionaria, mas não funcionaria:

[=|>|<|>=|<|<=|<>]\s\d+

É muito importante que o '>' ou '<' precede '='. Esses operadores não seriam válidos:

=<
=>
>>
<<
==

Estou usando isso para criar algum SQL dinâmico, para que os operadores de comparação precisem para o SQL válido.

Alguma sugestão?

Nenhuma solução correta

Outras dicas

(=|>|<|>=|<|<=|<>)\s\d+

Ou algo como: (realmente não faz o que você deseja, ele corresponde a todas as combinações de 2Character de = <>, mas para clareza)

[=><]{1,2}\s\d+

-> Quando você usa os aparelhos [], significa que um dos personagens internos deve ocorrer (múltiplos | definidos pode levar a comportamentos indefinidos, ou comportamento que não estou ciente)

-> Você provavelmente queria usar aparelhos simples (), onde o | tem o significado 'ou'.

Eu diria que o regex dado pela EMFI é bom o suficiente. Com algumas modificações, pode levar expressões como esta

"currentDate>=2012/11/07&&currentDate<=2012/11/08";

ou isto

"currentDate==2012/11/07";

Com este regex modificado

(<[=>]?|==|>=?|\&\&|\|\|)

E dê como "válido". Provavelmente é muito simples, mas pelo menos no meu caso, o suficiente

Editar: Regex foi modificado para tomar operadores de comparação (<,>,> =, <=, ==) e operadores booleanos (&&, ||) de maneira semelhante aos idiomas do tipo C

A sintaxe […] denota uma classe de personagem. Usar (…) Para agrupar: em vez disso:

(=|>|<|>=|<|<=|<>)\s\d+

E aqui está mais compacto:

(=|[<>]=?|<>)\s\d+

Ou:

(=|<[>=]?|>=?)\s\d+

Este fará o que você está procurando.

(<[=>]?|=|>=?)\s\d+

Acabei de resolver isso para mim. Combina <,>, <=,> = ,! =, =, <> e não => ou = <Infelizmente, ainda corresponde >>. Estou apenas verificando isso no meu código de aplicativo.

([!<>])?([=>])?(?!<)

Agora estou vindo antigo post, mas fiz que a bruxa regex seja sensível ao maiúsculas e descobri apenas o que precisamos, e espero que seja ajuda alguém.

Funciona para! =, <=,> =, ==, <,> e encontre -o apenas no início da string.

^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)?    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top