2015-09-04 2 views
-1

Мне нужно проверить и предотвратить ввод '=' (знак равенства) для входной строки, и я использую regex, чтобы поймать его [=]*. но он ловит и другие строки. ex input: 2c450807-4a4c-4f18-bf4f-5a100ced87a0. выше regex также ловит эту строку. , пожалуйста, помогите мне.Ошибка проверки правильности

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

  final String REGEX="[.,%*$#@?^<!&>'|/\\\\~\\[\\]{}+=\"-]*"; 


      Pattern pattern = Pattern.compile(REGEX); 
      Matcher matcher = pattern.matcher("2c450807-4a4c-4f18-bf4f-5a100ced87a0"); 

      if (matcher.matches()) { 

       System.out.println("found"); 

      } 
      else{ 

       System.out.println("not found!"); 
      } 

этот отпечаток "не найден!"

+4

Просьба представить полный соответствующий код, который у вас есть. Возможно, вам нужно использовать '=' или '= +'? Примечание '[=] *' может совпадать с пустой строкой, поэтому она будет соответствовать * любой * строке. –

+1

Вы можете просто использовать someString.contains ("="), чтобы проверить, содержит ли он = или нет. Он вернет true, если он содержит. –

+0

Я бы предложил использовать английскую проверку орфографии, очень полезно сделать лучшее впечатление от вашего вопроса. – peterh

ответ

2

Я думаю, что проблема заключается в том, что квантор * допускает 0 вхождений предшествующего подшаблона. Таким образом, [=]* соответствует любая строка.

Вы должны использовать лишь

= 

И тогда вы will not match2c450807-4a4c-4f18-bf4f-5a100ced87a0.

Также обратите внимание, что = не является особым символом регулярного выражения, вам не нужно его избегать или помещать в класс символов, чтобы избежать экранирования.

Однако, как было указано в другом комментарии, если вам не нужно использовать «регулярное выражение», просто проверьте, содержит ли строка = с str.contains("=").

2

При использовании регулярных выражений, вы можете найти элементы в зависимости сколько раз они появляются:

Если вы хотите, чтобы соответствовать группе containering точно n символ (в вашем случае: Равно (=)) ты может сделать что-то вроде этого:

(=){n} 

т.е. если (MYVAR === MyValue) сопоставляются при n = 3

Если вы хотите, чтобы соответствовать этому символу Один или несколько раз:

(=)+ 

т.е. если ((MYVAR = MyValue) или (MYVAR == MyValue) или (MYVAR === MyValue))

Если вы хотите, чтобы соответствовать элемент, который может появиться:

(=)* 

т.е. если (MYVAR < MyValue)

товар не должен присутствовать в вашем выражение для проверки. Значение может быть от 0 до n раз.