Регулярное выражение не содержится в предложении - PullRequest
0 голосов
/ 26 февраля 2020
com.sap.dsc.ac.v1.equipment.BROUDNHDJDJDNXJSNZKSNSJH

com.sap.dsc.ac.v1.equipment.int.BROUDNHDJDJDNXJSNZKSNSJH

Regex : com.sap.dsc.ac.v1.equipment.*.

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

select com .sap.ds c .a c .v1.equipment.BROUDNHDJDJDNXJSNZKSNSJH

и не должен выбирать com.sap.ds c .a c .v1.equipment.int.BROUDNHDJDJDNXJSNZKSNSHH имеет int

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Вы можете использовать отрицательное косвенное утверждение, чтобы удовлетворить ваше требование:

String input = "com.sap.dsc.ac.v1.equipment.BROUDNHDJDJDNXJSNZKSNSJH";
if (input.matches("com\\.sap\\.dsc\\.ac\\.v1\\.equipment\\.(?!int\\.).*")) {
    System.out.println("MATCH");
}

Термины (?!int\\.) говорят движку регулярных выражений, что нужно смотреть вперед в этой точке в имени пакета и убедиться, что int. не следует. Если это так, то in принимает все остальное, которое может последовать за допустимым соответствием.

0 голосов
/ 26 февраля 2020

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

com\.sap\.dsc\.ac\.v1\.equipment\..*\..*

'\.' - это точечный символ в строке

'. *' - любые числа любых символов

Но приведенное выше регулярное выражение будет верно для любых строк, которые содержат любое количество символов между точками до последнее слово. Если вы хотите сопоставить только строки, содержащие «int» - просто замените сначала «. *» На «int»

com\.sap\.dsc\.ac\.v1\.equipment\.int\..*

И теперь, если вы хотите, чтобы часть после «.int.» не содержит символ точки - добавьте исключение '.':

com\.sap\.dsc\.ac\.v1\.equipment\.int\.[^.]*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...