Хотите искать в строке, если есть какие-либо специальные символы в нем - PullRequest
0 голосов
/ 17 июня 2011

Я хочу найти любой специальный символ в строке Java. вот мой код

    Pattern p = Pattern.compile("^[a-zA-Z0-9 ]");
    Matcher m = p.matcher("hgbs!hf862376");
    boolean b = m.matches();

    if (b == true)
       System.out.println("sp. character is there");

Но это не работает. Может ли кто-нибудь предложить правильный Regex для этого. Я хочу разрешить только a-z, A-Z и 0-1.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

.*[^a-zA-Z0-9 ].* вместо ^[a-zA-Z0-9 ]

^ в классе символов (то есть в квадратных скобках) означает отрицание, поэтому любые символы, кроме перечисленных. Если не в классе символов, ^ означает начало строки. Также вам нужно сопоставить что-либо до или после специального символа. Таким образом, ваше оригинальное регулярное выражение соответствовало бы только строкам, которые имеют одну букву среди a-zA-Z0-9.

2 голосов
/ 17 июня 2011

Из JavaDocs:

  • Matcher.matches() пытается сопоставить всю входную последовательность с шаблоном.
  • Matcher.find() сканирует входную последовательность в поисках следующей подпоследовательности, которая соответствуетшаблон.

Вы должны использовать Matcher.find(), если вы ищете некоторую подстроку (даже один символ), которая соответствует определенным правилам, например, не является буквенно-цифровой.

Или вы можете использоватьMatcher.matches(), но тогда шаблон регулярного выражения должен быть [a-zA-Z0-9 ]+, что означает, что вы хотите совпадение, если строка состоит только из допустимых символов.Если появится какой-либо другой символ, match () вернет false.

0 голосов
/ 17 июня 2011
Pattern p = Pattern.compile("^[a-zA-Z0-9]*$");
Matcher m = p.matcher("hgbs!hf862376");
boolean b = m.matches(); // looking for no special characters

if (!b) {
    System.out.println("sp. character is there");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...