Регулярное выражение для диапазона чисел в curl - PullRequest
1 голос
/ 29 февраля 2020

Я хочу скачать серию png-файлов с веб-сайта curl. Они пронумерованы от b0000.png до b0373.png. Продолжайте получать сообщение об ошибке «совпадений не найдено».

b0+\b([1-9]|[1-9][0-9]|100)\b.png - это то, что, по моему мнению, может быть для страниц с b0000 по b0100, но это не работает.

Ответы [ 3 ]

3 голосов
/ 29 февраля 2020

В вашем паттерне b0+\b([1-9]|[1-9][0-9]|100)\b.png \b в этой части 0+\b не будет работать, потому что нет границы слова между 0 и другим di git из следующего чередования.

Вы также можете опустить границу слова в этой части \b.png и экранировать точку, чтобы буквально соответствовать ей.

Если вы хотите сопоставить только нули, вы можете сделать часть из 1-100 необязательной, как сейчас есть ожидаемое по крайней мере значение из ожидаемого чередования.

Чередование можно сократить, сделав необязательной деталь 0-9 [1-9][0-9]?


Для сопоставления от b0000.png до b0100.png Вы можете обновить шаблон до:

b0+(100|[1-9][0-9]?)?\.png

Regex demo

Весь диапазон от 0000 до 0373 можно сопоставить, используя:

b0+([1-9][0-9]?|[12][0-9]{2}|3[0-6][0-9]|37[0-3])?\.png

Regex demo

0 голосов
/ 29 февраля 2020

Поскольку вы упомянули curl, возможно, вам не нужно регулярное выражение. Вы могли бы быть в порядке с чем-то вроде:

for i in {0000..0373}; do curl http://example.org/b$i.png -O; done

PS: расширение скобок требует, чтобы вы запускали команду от zsh, а не bash.

0 голосов
/ 29 февраля 2020

Это делает трюк для меня (если взгляды поддерживаются в curl?):


1) Для диапазона 0000-0100:

b0(0\d\d|100)\.png

Regular expression visualization

Демо Debuggex

Regex101 Демо


2) Для диапазона 0000-0373:

b0[0-3]((?<=[0-2])\d|(?<=3)[0-7])((?<=37)[0-3]|(?<!37)\d)\.png

Regular expression visualization

Debuggex Demo

Regex101 Demo

Используйте группы без захвата для полного совпадения, если вы скорее сделаете это:

b0[0-3](?:(?<=[0-2])\d|(?<=3)[0-7])(?:(?<=37)[0-3]|(?<!37)\d)\.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...