Мне нужно захватить все числа после первого хэштега, который больше 1, но не могу захватить 10-19. Выражение выглядит так: randomstring # 11 # 1 # 0 В настоящее время я придумал: ^ [^ # \ s] + # [^ 0-1] \ d * #. + $ ...

1
tagilas 14 Янв 2021 в 11:00

2 ответа

Лучший ответ

Чтобы сопоставить любое число больше 1, которому предшествует символ решетки, вы можете использовать Lookbehind следующим образом:

(?<=#)(?:[1-9]\d+|[2-9])

Демо .

Разбивка:

  • (?<=#) - поиск назад, чтобы убедиться, что совпадению предшествует "#".
  • (?: - начать группу без захвата.
    • [1-9]\d+ - соответствует любому числу, состоящему из двух или более цифр, не начинающихся с нуля.
    • | - ИЛИ ...
    • [2-9] - соответствует любому числу от 2 до 9.
  • ) Закройте группу без захвата.

Если Lookbehind не поддерживается, вы можете использовать:

#([1-9]\d+|[2-9])

..и номер будет в группе 1.

Демо .

2
41686d6564 14 Янв 2021 в 08:16

Вот еще один вариант POSIX-y.

^[^#]*#(1[0-9]+|[2-9][0-9]*)

Круглые скобки будут фиксировать число, а выражение в целом будет соответствовать первому появлению #, если за ним следуют эти цифры. Первый ^ соответствует началу строки, а [^#]* будет соответствовать любой последовательности символов, которые не являются #.

Демо: https://regex101.com/r/0Nsxdf/1

1
tripleee 14 Янв 2021 в 08:19
65715295