регулярное выражение Java для проверки состояния США - PullRequest
1 голос
/ 27 июля 2011

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

public static boolean isStateValid(String state){
        String expression = "/^(?:A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])*$/";
        CharSequence inputStr = state;
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            return true;
        }else{
            return false;
        }
    }

Изменено на это после прочтения комментариев и все еще не работает

public static boolean isStateValid(String state) {
        CharSequence inputStr = state;
        Pattern pattern = Pattern
                .compile("AL|AK|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY|al|ak|ar|az|ca|co|ct|dc|de|fl|ga|hi|ia|id|il|in|ks|ky|la|ma|md|me|mi|mn|mo|ms|mt|nc|nd|ne|nh|nj|nm|nv|ny|oh|ok|or|pa|ri|sc|sd|tn|tx|ut|va|vt|wa|wi|wv|wy");
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            return true;
        } else {
            return false;
        }
    }

Ответы [ 5 ]

9 голосов
/ 27 июля 2011

много чего.

Сначала это не Perl.Удалите начальные и конечные косые черты.Во-вторых, почему не захватившая группа?Я имею в виду (?: Вам здесь вообще не нужна группа.В-третьих, почему так сложно?Просто скажите что-то вроде

Pattern.compile ("AL | AK | AR | AZ | CA");

и т. Д., Все штаты.Ваша оптимизация не имеет никаких преимуществ.Это просто усложняет регулярное выражение.

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

Не нравятся символы / в начале и конце шаблона. Когда я удаляю их, это работает. Кроме того, я не думаю, что вам нужен символ повторения * в конце.

2 голосов
/ 27 июля 2011

В этом регистре учитывается регистр США:

^(?-i:A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$

Тем не менее, я думаю, что использование регулярных выражений является чрезмерным.Используйте какой-нибудь список или массив.

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

Это упражнение по применению регулярных выражений или что-то, что будет использоваться в производственной среде?

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

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

Я не использовал этот конкретный инструмент, но использовал коммерческий инструмент, похожий на него, но я думаю, вы бы выиграли от такого инструмента, как: http://sourceforge.net/projects/regexevaluator/

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