Группы захвата совпадают с квантификатором Regexp

Я новичок в мире регулярных выражений, мне нужно захватить несколько различных типов строк.

Кстати, предложите более изящный способ захвата таких строк.
n = любое положительное число (не то же самое)

|n||0||0||0||0|
|n||n||0||0||0|
|n||n||n||0||0|
|n||n||n||n||0|
|n||n||n||n||n|

Я пытался использовать такое регулярное выражение для захвата первого и второго типов строк

^\|([1-9]+)\|(?:([1-9]+)\|){4}|(?:(0)\|){4}$

Ноль следует рассматривать как отдельный символ,
Мне нужно захватить каждое число или ноль

Проблема теперь в том, что он захватывает только первый соответствующий символ и последний

Но не захватывает другие цифры

Пожалуйста, помогите с этим регулярным выражением, и было бы здорово, если бы кто-то предоставил более изящный способ (в конце я должен написать 4 оператора ors, чтобы захватить мои строковые типы)

Спасибо

0

Решение

Я не уверен, достаточно ли это для вас или нет

\|(?:(0)|([0-9]+))\|

https://regex101.com/r/fX5xI4/2

Теперь вам нужно разделить ваши совпадения на группы элементов x, где x — количество столбцов. Я полагаю, это должно быть просто отлично.

1

Другие решения

Как насчет:

^(?:\|[1-9][0-9]*\|){1,5}(?:\|0\|){0,4}$

Объяснение:

^               : start of line
(?:           : non capture group
\|           : a pipe character
[1-9][0-9]*  : a positive number of any length
\|           : a pipe character
){1,5}        : the group is repeated 1 to 5 times
(?:           : non capture group
\|0\|       : a zero with pipe arround it
){0,4}        : group is repeated 0 to 4 times.
$               : end of line

Это будет соответствовать всем приведенным вами примерам, т.е. некоторые положительные числа, за которыми следуют нули.

0

Вы можете сначала проверить строку, а затем просто найти с помощью \d+

Проверка: '~^\|[1-9]\d*\|(?:\|(?:[1-9]\d*|0+(?!\|\|[1-9]))\|){4}$~'

 ^                             # BOS
\|
[1-9] \d*                     # Any numbers that start with non-zero
\|

(?:
\|
(?:
[1-9] \d*                     # Any numbers that start with non-zero
|                              # or,
0+                            # Any numbers with all zeros
(?! \|\| [1-9] )              # Not followed by a non-zero
)
\|
){4}
$                             # EOS
0
По вопросам рекламы [email protected]