Проблема регулярного выражения Java с двумя или более знаками - PullRequest
2 голосов
/ 14 октября 2019

Я хочу написать шаблон регулярного выражения, в котором найдены только строки: знаки p, q, r, ^, v и ~, а также импликация и эквивалентность, представленные двумя (=>) или тремя (<=>) знаками. ,Как я могу это сделать?

Например, этот шаблон:

Pattern pattern = Pattern.compile("[(=>)(<=>)]*");

Соответствует строкам, содержащим: (, =, >, <, ) знаков, тогда как я хочу написать шаблон, который содержит только *=>* и *<=>*.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Вы можете изменить свой шаблон так:

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("(p|q|r|v|\\^|~|=>|<=>)");
    Matcher matcher = pattern.matcher(yourString);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

Проблема, с которой вы столкнулись, заключается в том, что [...] - это набор символов , что означает, что он сопоставляется с отдельными символамиу вас внутри фигурные скобки, а не полная строка.

0 голосов
/ 16 октября 2019

Ваш текущий шаблон представляет собой класс символов и может быть записан как [()<>=]*

. Вы можете обновить свой шаблон, добавив знаки p, q, r, ^, v и ~вместо класса символов [pqrv^~].

Для соответствия либо =>, либо <=> вы можете сделать < необязательным, используя знак вопроса.

Полный шаблон можно записать, используя чередование группа без захвата:

(?:[pqrv^~]|<?=>)

Regex demo

Код может выглядеть как

Pattern pattern = Pattern.compile("(?:[pqrv^~]|<?=>)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...