Как сопоставить операторы сравнения в Regex - PullRequest
4 голосов
/ 26 февраля 2010

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

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

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

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

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

=<
=>
>>
<<
==

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

Есть предложения?

Ответы [ 6 ]

4 голосов
/ 15 ноября 2012

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

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

или это

"currentDate==2012/11/07";

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

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

И дайте это как "действительный". Вероятно, это очень просто, но, по крайней мере, в моем случае достаточно

EDIT: Регулярное выражение было изменено для того, чтобы принимать операторы сравнения (<,>,> =, <=, ==) и логические операторы (&&, ||) аналогично языкам на языке C </p>

3 голосов
/ 26 февраля 2010
(=|>|<|>=|<|<=|<>)\s\d+

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

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

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

-> вы, вероятно, хотели использовать простые скобки (), где | имеет значение «ИЛИ».

2 голосов
/ 26 февраля 2010

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

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

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

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

Или:

(=|<[>=]?|>=?)\s\d+
0 голосов
/ 19 ноября 2014

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

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

^(^(!=)?|^(<=)?|^(>=)?|^(==)?|^(<)?|^(>)?)?    
0 голосов
/ 16 мая 2013

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

([!<>])?([=>])?(?!<)
0 голосов
/ 26 февраля 2010

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

(<[=>]?|=|>=?)\s\d+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...