Я новичок в мире регулярных выражений, мне нужно захватить несколько различных типов строк.
Кстати, предложите более изящный способ захвата таких строк.
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-9]+))\|
https://regex101.com/r/fX5xI4/2
Теперь вам нужно разделить ваши совпадения на группы элементов x, где x — количество столбцов. Я полагаю, это должно быть просто отлично.
Как насчет:
^(?:\|[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
Это будет соответствовать всем приведенным вами примерам, т.е. некоторые положительные числа, за которыми следуют нули.
Вы можете сначала проверить строку, а затем просто найти с помощью \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