Как сопоставить операторы сравнения в Regex

StackOverflow https://stackoverflow.com/questions/2343938

  •  23-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать регулярное выражение, которое соответствует таким сравнениям:

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

Я думал, что это сработает, но нет:

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

Очень важно, чтобы '>' или '<' предшествовали '='.Эти операторы будут недействительны:

=<
=>
>>
<<
==

Я использую это для создания динамического sql, поэтому операторам сравнения необходимо проверять sql.

Какие-либо предложения?

Нет правильного решения

Другие советы

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

или что-то вроде:(на самом деле не делает то, что вы хотите, соответствует всем двухсимвольным комбинациям =<>, но для ясности)

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

-> когда вы используете фигурные скобки [], это означает, что один из символов внутри должен иметь место (несколько | определенных могут привести к неопределенному поведению или поведению, о котором я не знаю)

-> Вы, вероятно, хотели использовать Simple Braces (), где | имеет значение или ».

Я бы сказал, что регулярное выражение, данное EmFi, достаточно хорошо.С некоторыми изменениями он может принимать такие выражения

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

или это

"currentDate==2012/11/07";

С этим измененным регулярным выражением

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

И присвойте ему статус «действительный».Наверное, это очень просто, но, по крайней мере, в моем случае достаточно.

РЕДАКТИРОВАТЬ:Regex было изменено, чтобы использовать операторы сравнения (<,>,>=,<=,==) и логические операторы (&&,||) аналогично C-подобным языкам.

Синтаксис […] обозначает класс символов.Использовать (…) для группировки вместо этого:

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

А вот более компактный:

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

Или:

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

Этот сделает то, что вы ищете.

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

только что решил это для себя.он соответствует <, >, <=, >=, !=, =, <>, а не => или =<, к сожалению, он все еще соответствует >>.Я просто проверяю это в коде своего приложения.

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

Теперь я ура, старый пост, но я сделал регулярное выражение, которое чувствительно к регистру и нахожу только то, что нам нужно, и я надеюсь, что это кому-нибудь поможет.

Он работает для != , <=, >=, ==, < , > и находит его только в начале строки.

^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)?    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top