Como combinar operadores de comparação em regex
-
23-09-2019 - |
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&¤tDate<=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.
^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)?