Ответ 1
Просто избегайте тире, чтобы предотвратить их интерпретацию (я не думаю, что подчеркивание нуждается в побеге, но это не может повредить). Вы не говорите, какое регулярное выражение вы используете.
([A-Za-z0-9\-\_]+)
Я не уверен, как я могу добиться этого выражения соответствия. В настоящее время я использую
([A-Za-z0-9-]+)
..., который соответствует буквам и цифрам. Я также хотел бы совместить символы тире и подчеркивания в одном выражении. Кто-нибудь знает как?
Я хотел бы иметь возможность сопоставлять product_name и название продукта
Просто избегайте тире, чтобы предотвратить их интерпретацию (я не думаю, что подчеркивание нуждается в побеге, но это не может повредить). Вы не говорите, какое регулярное выражение вы используете.
([A-Za-z0-9\-\_]+)
Ваше выражение должно уже соответствовать тире, потому что final - не будет интерпретироваться как оператор диапазона (поскольку диапазон не имеет конца). Чтобы добавить символы подчеркивания, попробуйте:
([A-Za-z0-9_-]+)
В зависимости от вашего варианта регулярного выражения вы можете сделать это просто:
([\w-]+)
Кроме того, вам, вероятно, не нужны скобки, если это не является частью большего выражения.
Вы действительно можете сопоставить все эти символы, но безопаснее избегать -
, чтобы было ясно, что это будет принято буквально.
Если вы используете вариант POSIX, вы можете выбрать:
([[:alnum:]\-_]+)
Но так как вы включаете знак подчеркивания, я просто использовал бы:
([\w\-]+)
(работает во всех вариантах)