Совпадение регулярных выражений, если присутствует

#regex

#регулярное выражение

Вопрос:

Есть ли что-то в регулярном выражении для сопоставления (условно), только если оно существует?

например

строка может

 question_1
  

или только

 question
  

В случае первого, оно должно соответствовать целому числу в конце, но, как и в случае последнего, оно должно оставить его.

Комментарии:

1. Что означает «оставить это»? Вы хотите сопоставить любую строку независимо от того, есть ли символ подчеркивания и число в конце или нет?

2. Этот вопрос указывает на нулевое знание регулярных выражений. Даже не ноль. Null. ЭТО не учебное пособие. Когда вы публикуете здесь, вы должны знать хотя бы основы аргумента, о котором вы спрашиваете.

3. Вы пытаетесь сказать, что если есть символ подчеркивания, за ним должно следовать число, иначе в конце не должно быть подчеркивания?

Ответ №1:

? Это квантификатор 0-1 в регулярных выражениях. d? означает 0 или 1 цифру. * Это квантификатор с бесконечным числом 0. d* означает 0 или более цифр. Это то, что вы хотите? (кроме того, это 1 или более квантификатор, а не квантификатор означает ровно 1)

Чтобы уточнить, что вы спросили, я бы сказал

 question(_d )?
  

question за которым следует необязательный ( _ И 1 или более цифр)

Где скобки предназначены только для группировки подвыражения (это «математические» скобки)

Ответ №2:

Не совсем понимаю вопрос. Вы просто хотите извлечь число?

 question_(d )
  

Ответ №3:

Если вы хотите извлечь число
question(?:_?)(d)?

Ответ №4:

в perl вы могли бы сделать что-то вроде:

 my $string = 'question_1';
my $question_number = $string =~ /question_(d )/i;
  

now $question_number будет содержать значение int, если оно совпадает, и будет undef , если это не так

Ответ №5:

Если подчеркивание и число являются необязательными, попробуйте что-то вроде этого:

question(?:_d)?

Комментарии:

1. Он пытался сказать, что если есть символ подчеркивания, то должно присутствовать число. в противном случае, только «вопрос» без окончания _