2015-08-04 5 views
1

Давайте предположим, что я получил эту строку:Java регулярное выражение матч группы пустым, даже если он соответствует

|125148 Schalter f GLE GÜ 90/80Z nei PL 80 16AJ

И хотите, чтобы соответствовать следующие две части:

  • Schalter f GLE GÜ 90/80Z nei PL 80

16AJ может использоваться как «точка останова», поэтому все, начиная с первой буквы после номера, до тех пор, пока «точка разрыва» не будет согласована в группе.

Я получил это как-то работать с этим регулярным выражением ^\|([0-9])+(.)+(?=\s+16AJ), но моя первая группа содержит 8 символов, а моя вторая группа ничего не содержит.

Смотреть это demo

Что я упускаю здесь? Почему моя вторая группа пуста?

ответ

3
^\|([0-9])+(.+)(?=\s+16AJ) 

      ^^ 

Вам необходимо взять квантификатор внутри группы захвата.

+0

Отлично! большое спасибо – Flatron

1

Вы можете использовать это регулярное выражение:

^\|([0-9]+)\s+(.+?16AJ) 

В Java:

^\\|([0-9]+)\s+(.+?16AJ) 

RegEx Demo

Это даст вам 125148 в первой группе и Schalter f GLE GÜ 90/80Z nei PL 80 16AJ во 2-й группе.

1

Вторая группа не пуста. Вы снимаете 8 в первой группе и 0 во втором, что я и ожидал от этого регулярного выражения. Вам нужно поставить кванторы внутри групп захвата. Как вы это делаете, вы захватываете один символ за раз, каждый раз переписывая ранее захваченный символ.

Я думаю, что это то, что вы пытаетесь для:

^\|([0-9]+)\s+(.+?)\s+16AJ 
Смежные вопросы