регулярное выражение, соответствующее одному или нескольким символам a или только одному символу b - PullRequest
1 голос
/ 13 апреля 2011

Я принимаю пользовательский ввод через пользовательский интерфейс, и я должен проверить его.Входной текст должен соответствовать следующему условию

Он должен заканчиваться одним или несколькими пробелами ИЛИ только одним '='

Я могу использовать

". * [\ S =] +"

, но также соответствует множеству '=', чего я не хочу.Пожалуйста, помогите.

Ответы [ 3 ]

3 голосов
/ 13 апреля 2011

Вы можете использовать чередование :

(\s+|=)$

Это выражение означает, что соответствует одному или нескольким пробельным символам или , равным одному, в конце строки . $ - это якорь , который соответствует концу строки (как вы уже упоминали, вы ищете символы в конце строки).

(Как правильно указал tchrist в комментариях, $ соответствует концу строки вместо конца строки в многострочном режиме. Если это верно в вашем случае, и вы действительно ищете конец строки вместо конца строки, вместо этого вы можете использовать \Z, что соответствует концу строки независимо от многострочного режима.)


Если вы хотите убедиться, что в конце есть только один =, вы можете использовать lookaround (в данном случае, в частности, отрицательный взгляд сзади). Обратный взгляд - это утверждение нулевой ширины , которое сообщает механизму регулярных выражений, что утверждение должно пройти, чтобы шаблон соответствовал, но оно не потребляет никаких символов.

(\s+|(?<!=)=)$

В этом случае (?<!=) сообщает механизму регулярных выражений, символ перед текущей позицией не может быть =. При вводе в выражение (?<!=)= означает, что = будет соответствовать, только если предыдущий символ также не является =.

2 голосов
/ 13 апреля 2011

Начальная строка

Все, что не "=" (чтобы избежать двойного "==")

Один или несколько пробелов ИЛИ один "="

Конец строки

^([^=]*[\s+|=])$

Должно работать: -)

1 голос
/ 13 апреля 2011

Попробуйте это выражение:

".*(\\s+|=)" 
...