Ошибка соответствия Java Regex - PullRequest
       5

Ошибка соответствия Java Regex

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

Я пытаюсь следующий сегмент безрезультатно:

 public class test {

    public static void main(String args[] ){

       String password = "s8bgBQYPmUaNjkToXCJLAwAA";
       System.out.println( Pattern.matches("[0-9]", password ));

   }

}

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

Ответы [ 3 ]

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

Вы проверяете, состоит ли вся строка из одной цифры. Что вы на самом деле имеете в виду:

System.out.println( Pattern.matches(".*[0-9].*", password ));

Добавление .* в начало и конец позволяет ему соответствовать любому количеству других символов (. означает «любой символ» и * означает «любое количество раз»).

0 голосов
/ 07 февраля 2010

Если вы выполняете этот тип опроса символов часто в цикле, вы, возможно, не захотите использовать регулярное выражение вообще, а создадите свою собственную процедуру поиска, опрашивающую StringBuffer.

/**
* Method to evaluate a String to see whether it contains one (or potentially more) of a 
* char or member of a group of chars.
*
* @param String to evaluate
*
* @param String containing all characters to evaluate against the subject string
*
* @return true on first correct match, false if no match found
**/

public boolean sbContainsOneOf(String sStringToCheck, String sCheck)
{
StringBuffer sb = new StringBuffer(sStringToCheck);

char[] tmp2 = sCheck.toCharArray();

for (int i = 0; i < sb.length(); i++)
    {

    for (int k = 0; k < tmp2.length; k++)
    if (sb.charAt(i) == tmp2[k])
        {
            return true;
        }

    }
return false;
}

Тогда все, что вам нужно сделать, это позвонить:

String password = "s8bgBQYPmUaNjkToXCJLAwAA"; 
System.out.println(sbContainsOneOf(password,"0123456789"));

Это происходит в 10-15 раз быстрее ... Чем длиннее список строк и опций, тем больше становится разница между ними. Обычно я избегаю регулярных выражений, если только они не являются уникальными или чрезвычайно сложными для реализации в виде кода, и предпочитаю повторять их с помощью оптимизированных подпрограмм на основе StringBuffer. Делая это таким образом, постепенно ваша коллекция замен регулярных выражений заполняется, и вы в конечном итоге получаете очень полезный способ запроса шаблона без высоких сопутствующих издержек регулярного выражения.

0 голосов
/ 06 февраля 2010

Вы можете или не можете использовать [A-z] вместо. если вы не хотите, чтобы он соответствовал специальным символам. Я не Java-парень, поэтому специфика регулярных выражений в Java лучше всего представлена: http://www.regular -expressions.info / java.html

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