2016-12-06 2 views
0

Я пытаюсь поймать несколько раз группу захвата, которая следует за другим. Я могу многократно повторять одну и ту же строку снова и снова. Давайте просто взять следующий один для испытаний:2 Захват групп с множественным уловом на втором, который разделен нежелательным символом

thing: random1_abcd 
       abcd_n1p3; abcd_n2p1 


"random2_abcd" does not exist. 
thing: random3_abcd 
       abcd_n1p1; abcd_n2p3 

thing: random4_abcd 
       abcd_n1p3; abcd_n3p1; abcd_n2p7 

thing: random5_abcd 
       abcd_n4p2; abcd_n3p3; abcd_n6p7; abcd_n1p6 

Я хочу, чтобы поймать abcd_X Еогеасп randomX_abcd (и зная связаны между ними). Я не должен ловить «random2_abcd», так как его не существует!

Вот что я до сих пор: (\w*_abcd) - это захват randomX_abcd. Я получил (abcd_\w*), чтобы захватить часть abcd_X. Сначала я попытался поймать evey abcd_X отдельно. Поэтому я использовал (\w*_abcd)\s*(?: (abcd_\w*);?)+, но он только поймал последние abcd_X, так как он жадный. Это не значит, что уловы во второй группе. Example

Теперь я пытаюсь не просто получить 2 группы (не более кратные матчи с тем же захватив группы: одна с randomX_abcd, а другой с соответствующим список abcd_X Существует сложная часть:. Она может иметь . кратные пространства и новая строка но это могут иметь только один пространство Таким образом, я не могу полагаться на новой строке части Учитывая новую идею я придумал это:..

(\w*_abcd)\s*((?: ?abcd_\w*;?)+) 

Который работает нормально, но я интересно, возможно ли достичь моей первой идеи: поймать то же самое randomX_abcd с каждым отдельным abcd_X?

+0

Нет, это невозможно. Поскольку после успешного совпадения указатель регулярного выражения продвигается вправо. Вы не можете сопоставлять несколько раз с тем же индексом в строке. Это ответ, который вы ожидаете? –

+0

Хорошо, я благодарю вас. – naurel

ответ

1

Нет, это невозможно, поскольку индекс регулярного выражения продвигается вправо после успешного совпадения. Вы не можете сопоставлять несколько раз с тем же индексом в строке.

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