RegEX: как сопоставить строку, которая не окружена - PullRequest
2 голосов
/ 02 сентября 2010

У меня есть строка "REC/LESS FEES/CODE/AU013423".

Что может быть выражением regEx для соответствия "REC" и "AU013423" (все, что не окружено косыми чертами /)

Я использую /^>*/, который работает и соответствует строке в слэше, т. Е. Используя это, я могу найти "/LESS FEES/CODE/", но я хочу отрицать это, чтобы найти обратный, т.е.* Нужна помощь в этом.Спасибо

Ответы [ 3 ]

2 голосов
/ 02 сентября 2010

Если вы знаете, что ищете только буквенно-цифровые данные, вы можете использовать регулярное выражение ([A-Z0-9]+)/.*/([A-Z0-9]+) Если это соответствует, у вас будут две группы, которые содержат первую и последнюю текстовые строки.

Этот код печатает RECAU013423

final String s = "REC/LESS FEES/CODE/AU013423";
final Pattern regex = Pattern.compile("([A-Z0-9]+)/.*/([A-Z0-9]+)", Pattern.CASE_INSENSITIVE);
final Matcher matcher = regex.matcher(s);
if (matcher.matches()) {
    System.out.println(matcher.group(1) + matcher.group(2));
}

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

1 голос
/ 02 сентября 2010

Вот еще один вариант:

String s = "REC/LESS FEES/CODE/AU013423";
String[] results = s.split("/.*/");
System.out.println(Arrays.toString(results));
// [REC, AU013423]
0 голосов
/ 02 сентября 2010
^[^/]+|[^/]+$

соответствует всему, что происходит до первой или после последней косой черты в строке (или всей строки, если косой черты нет).

Чтобы перебрать все совпадения в строке в Java:

Pattern regex = Pattern.compile("^[^/]+|[^/]+$");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    // matched text: regexMatcher.group()
    // match start: regexMatcher.start()
    // match end: regexMatcher.end()
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...