2015-07-12 3 views
2

Имея эту строку:Как найти последнее вхождение полукокса с использованием регулярных выражений

a=123&b=456&m30:111111111&m30:22222222 

К последнему появлению : мне нужно, чтобы получить с помощью регулярных выражений 22222222 значение.

Как я могу сделать это с помощью регулярного выражения? Строковый API неприемлем.

В настоящее время у меня есть это регулярное выражение: [^:]+:(.*), которое дает мне первый. Предположим, что может быть более одного вхождения m30: Строка

+2

Почему вы не получаете подстроку, используя 'String # lastIndexOf' вместо этого? –

+0

Мне нужно сделать это только с помощью регулярного выражения –

+1

Снова: ** почему? ** –

ответ

2

Вы можете попытаться найти все не-ободочной кишки символ до конца строки [^:]+$.

0

(?:[^:]+):(.*)

Вы должны искать первую группу с этим регулярным выражением. ?: - модификатор групповой группы.

Итак, когда вы compile() что Pattern, matcher.group(1); всегда будет возвращать 22222222a=123&b=456&m30:111111111&m30:22222222 для ввода.

С уважением.

0

.*:([^:]*)$

выше должно работать. Разрешите что-нибудь, затем «:» grop не должен содержать «:» до конца.

0

Просто замените все символы до последних : с пустой строкой.

string.replaceFirst(".*:", ""); 
2

Мое предложение:

(?<=[:])(\d+)$ 
  • $ анкеры матч до конца строки
  • (\d+) захватывает группу из одного или более цифр
  • (?<=[:]) гарантирует, что группа цифр записывается только в том случае, если ему предшествует двоеточие, но сам двоеточие не является частью захвата. Обратите внимание, что в данном примере вы дали это не является необходимым, поскольку использование (\d+)$ должно быть достаточно, чтобы вернуть последнюю группу цифр (матч останавливается на первом нецифры символ с конца)

Если же вас хотел захватить ничего, что происходит после последнего двоеточия, то вы должны использовать:

(?<=[:])(.+)$ 

но вы должны убедиться, что он захватывает в Ungreedy режиме.

Смежные вопросы