У вас есть #p
вне группы захвата, что делает его необходимой частью результата. Вы также неправильно используете символ точки (.
). Dot (в большинстве вариантов reg-ex) будет соответствовать любому персонажу. Измените его на:
([0-9]*)(?:#p([0-9]*))?
Синтаксис (?:)
- это то, как вы получаете группу, не связанную с захватом. Затем мы фиксируем только цифры, которые вас интересуют. Наконец, мы делаем все возможное.
Кроме того, большинство вариантов reg-ex имеют класс символов \d
для цифр. Таким образом, вы можете упростить еще больше:
(\d*)(?:#p(\d*))?
Как указал другой человек, оператор *
мог бы сопоставить цифры zero . Чтобы предотвратить это, используйте вместо этого оператор +
:
(\d+)(?:#p(\d+))?