Я пытаюсь поймать несколько раз группу захвата, которая следует за другим. Я могу многократно повторять одну и ту же строку снова и снова. Давайте просто взять следующий один для испытаний: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?
Нет, это невозможно. Поскольку после успешного совпадения указатель регулярного выражения продвигается вправо. Вы не можете сопоставлять несколько раз с тем же индексом в строке. Это ответ, который вы ожидаете? –
Хорошо, я благодарю вас. – naurel