Как сопоставить операторы сравнения в Regex
-
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&¤tDate<=2012/11/08";
или это
"currentDate==2012/11/07";
С этим измененным регулярным выражением
(<[=>]?|==|>=?|\&\&|\|\|)
И присвойте ему статус «действительный».Наверное, это очень просто, но, по крайней мере, в моем случае достаточно.
РЕДАКТИРОВАТЬ:Regex было изменено, чтобы использовать операторы сравнения (<,>,>=,<=,==) и логические операторы (&&,||) аналогично C-подобным языкам.
Синтаксис […]
обозначает класс символов.Использовать (…)
для группировки вместо этого:
(=|>|<|>=|<|<=|<>)\s\d+
А вот более компактный:
(=|[<>]=?|<>)\s\d+
Или:
(=|<[>=]?|>=?)\s\d+
Этот сделает то, что вы ищете.
(<[=>]?|=|>=?)\s\d+
только что решил это для себя.он соответствует <, >, <=, >=, !=, =, <>, а не => или =<, к сожалению, он все еще соответствует >>.Я просто проверяю это в коде своего приложения.
([!<>])?([=>])?(?!<)
Теперь я ура, старый пост, но я сделал регулярное выражение, которое чувствительно к регистру и нахожу только то, что нам нужно, и я надеюсь, что это кому-нибудь поможет.
Он работает для != , <=, >=, ==, < , > и находит его только в начале строки.
^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)?