2015-07-25 2 views
0

Мне нужно сопоставить строки между «JJ». и второе появление «,» со спины.Совпадение первого вхождения из спины в regex

например:

In Mackintosh v. Watkins (1904) 1 C L J 31, Brett and Mookerjee, JJ. 

желаемый результат: Brett and Mookerjee

В настоящее время, что я использую матчи первого "" к JJ.

мой рисунок:

",.*.[^,]*JJ\b" 
+6

Показать код, который вы пробовали! – Jens

+0

Чем должен быть выход «Бретт и Мукерджи», правильно? –

+0

Разве это не подстрочная строка между ',' и ','? –

ответ

2

Вы можете использовать внешний вид обходные или отлов группы.

  • Посмотрите вперед решение за

    (?<=,)[^,]*(?=,[^,]*JJ\b) 
    
    • (?<=,) Посмотрите, проверяет, является ли строка предшествует ,
    • (?=,[^,]*JJ\b) Посмотрите вперед. Проверяет, является ли строка с последующим ,, а затем ничего, кроме , и JJ

    Regex Demo

  • Захват goups

    ,([^,]*),[^,]*JJ\b 
    

    Regex Demo

    Здесь группа захвата 1 будет содержать строка Brett and Mookerjee

+0

OP хочет: '' JJ. " и второе появление «,« назад », и он делает« первый »,« в JJ ». Разве это не то же самое? –

+1

@joeyrohan Не обязательно, класс отрицательных символов '[^,] *' гарантирует ',' со спины. – nu11p01n73R

0

Использование групп захвата.

Matcher m = Pattern.compile(",\\s*([^,]+),[^,]*\\bJJ\\b").matcher(s); 
if(m.find()) 
{ 
System.out.println(m.group(1)); 
} 

DEMO

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