Как использовать Regex в Java для соответствия шаблону?

Я прочитал документацию и различные учебники онлайн, но я все еще запутался в том, как регулярное выражение работает на Java. То, что я пытаюсь сделать, это создать функцию, которая принимает аргумент типа string. Затем я хочу проверить, содержит ли переданная строка любые символы, кроме MDCLXVIivxlcdm. Так, например, строка «XMLVID» должна возвращать false, а «ABXMLVA» должна возвращать значение true.

public boolean checkString(String arg) { Pattern p = Pattern.complile("[a-zA-z]&&[^MDCLXVIivxlcdm]"); Matcher m = p.matcher(arg); if(m.matches()) return true; else return false; } 

Когда я передаю «XMLIVD», «ABXMLVA» и «XMLABCIX», все возвращают false. Что я делаю не так? Любая помощь будет оценена.

    Вам нужно будет использовать оператор пересечения символьного classа Java внутри classа символов, иначе он буквально соответствует && . Btw, ваш первый class символов от A до (нижний регистр) z также включает в себя [\]^_ , чего вы, разумеется, не хотите; и вы ошибочно написали «Patter.complile».

    Кроме того, matches()

    Попытка сопоставить весь регион с шаблоном.

    Таким образом, вам либо нужно использовать find() вместо, либо подставить выражение с помощью .* .

     public boolean checkString(String arg) { return Pattern.compile("[[a-zA-Z]&&[^MDCLXVIivxlcdm]]").matcher(arg).find(); } 

    вы можете использовать такую ​​функцию, с двумя аргументами, а именно:

    • origingalString исходная строка для проверки
    • searchString строка для поиска

    код точно,

     public boolean checkCompletelyExist(String origingalString,String searchString){ boolean found = false; String regex = ""; try{ for(int i = 0; i < searchString.length();i++){ String temp = String.valueOf(searchString.charAt(i)); regex = "[\\x20-\\x7E]*"+"["+temp.toLowerCase()+"|"+temp.toUpperCase()+"]+[\\x20-\\x7E]*"; if(!origingalString.matches(regex)){ found = true; break; } } System.out.println("other character present : "+found); } catch (Exception e) { e.printStackTrace(); } return found; } 

    например:

    checkCompletelyExist("MDCLXVIivxlcdm","XMLVID") будет other character present : false

    а также

    checkCompletelyExist("MDCLXVIivxlcdm","ABXMLVA") будет other character present : true

    Регулярные выражения (RegEx / RegExp) В основном регулярное выражение представляет собой шаблон, описывающий определенное количество текста.

     ^abc$ start / end of the string \b \B word, not-word boundary \w \d \s word, digit, whitespace \W \D \S not word, digit, whitespace \z - End of entire string (…) - Grouping (capture groups) [abc] any of a, b, or c [^abc] not a, b, or c [ag] character between a & g { m,n } - quantifiers for “from m to n repetitions” + - quantifiers for 1 or more repetitions (ie, {1,}) ? - quantifiers for 0 or 1 repetitions (ie, {0,1}) 

    POSIX Bracket Expressions скобок POSIX Bracket Expressions скобок POSIX – это особый тип classов символов. Выражения скобок POSIX соответствуют одному символу из набора символов, как и обычные classы символов. Имена classов символов POSIX должны быть записаны в нижнем регистре. Стандарт POSIX определяет 12 classов символов. В приведенной ниже таблице перечислены все 12, плюс classы [:ascii:] и [:word:] которые также поддерживаются некоторыми вариантами регулярных выражений.

    введите описание изображения здесь

    Согласование шаблонов с регулярными выражениями:

     final Pattern mix_alphaNumaric_pattern = Pattern.compile("^[A-Za-z0-9]+$"); final Pattern alphabets_pattern = Pattern.compile("^[A-Za-z,\\- ]+$"); final Pattern alphabetsNull_pattern = Pattern.compile("|^[A-Za-z,\\- ]+$"); final Pattern numaric_pattern = Pattern.compile("^[0-9]+$"); // ^begning +followed By $end final Pattern date_time_pattern = Pattern.compile("\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}\\:\\d{1,2}"); final Pattern weather_pattern = Pattern.compile("[\\-]*\\d{1,3}\\.\\d{1,6}"); final Pattern email_pattern = Pattern.compile("^[\\w-_\\.+]*[\\w-_\\.]\\@([\\w]+\\.)+[\\w]+[\\w]$"); final Pattern mobile_pattern = Pattern.compile("(\\+)?(\\d{1,2})?\\d{10}"); public static void main(String[] args) { String[] str = {"MCDL", "XMLIVD", "ABXMLVA", "XMLABCIX"}; Pattern p = Pattern.compile("^(M|D|C|L|X|V|I|i|v|x|l|c|d|m)+$"); // Returns: true if, and only if, the entire region sequence matches this matcher's pattern for (String sequence : str ) { boolean match = false, find = false; if ( !p.matcher(sequence).matches() ) match = true; if (p.matcher(sequence).find()) find = true; System.out.format("%s \t Match[%s] Find[%s]\n", sequence, match, find); } } 

    Вывод:

     MCDL Match[false] Find[true] XMLIVD Match[false] Find[true] ABXMLVA Match[true] Find[false] XMLABCIX Match[true] Find[false] 

    @see это ссылки на: