Обнаружение Назначения - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь написать регулярное выражение для обнаружения назначения в скрипте (=), когда должно быть равенство (==). У меня есть следующее в Java:

Pattern p = Pattern.compile("[^=]=[^=]");

Это возвращает истину:

p.matcher("a=b").matches();

Это возвращает ложь:

p.matcher("a = b").matches();

Я озадачен тем, что здесь происходит, может кто-нибудь сказать мне, почему второе выражение не соответствует?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 26 июля 2011

[^=] будет соответствовать только одному символу, который не является =, вы, вероятно, захотите соответствовать одному или нескольким, например:

[^=]+=[^=]+

+ после класса символов означает повторение предыдущего элемента один или несколько раз.

3 голосов
/ 26 июля 2011

[^=] соответствует ровно одному символу в классе. Вы хотите "[^=]+=[^=]+".

изменить в ответ на комментарий: Если вы просто хотите пропустить пробел, вы можете получить что-то вроде "[^\s=]+\s*=\s*[^\s=]+"

1 голос
/ 26 июля 2011

Matcher.matches () проверяет только всю входную строку.

Вы хотите Matcher.find () , который найдет частичное совпадение.

0 голосов
/ 26 июля 2011

«Проблема» в том, что Java сопоставляется с полной строкой, как если бы на других языках были заданы якоря начала и конца (^[^=]=[^=]$).

Вы должны знать это иизмените шаблон соответственно.

"[^=]=[^=]" соответствует 3 символам.

  1. "a = b" ==> очевидный

  2. "a = b" a сопоставляется с [^=], тогда шаблон требует = ==> шаблон не удаётся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...