То, что вы написали как свое регулярное выражение, содержит в коллекции несколько вещей, которые могут не соответствовать вашим ожиданиям, в зависимости от используемого механизма регулярных выражений.\s
: это может соответствовать \
или s
, а не пробел или табуляция.\%20
: может соответствовать \
, а также %
, 2
и 0
.Во всяком случае, вы хотите соответствовать %20
по порядку.Это означает, что вы должны использовать ветку.И если вы поставите -
в начале или в конце, вам не нужно избегать его.
^product/((?:[A-Za-z_ -]|%20)+)$
((?:...)
- это группа без захвата, которая более эффективна, чем захватgroup (...)
.)
Однако я думаю, что вполне возможно, что то, что вы используете, превращает %20
в символ пробела, и поэтому вы можете просто превратить \s
в пробел и избавьтесь от \%20
:
^product/([A-Za-z _-]+)$
Также подумайте, следует ли вам разрешить больше символов - для себя я бы использовал ^product/(.*)$
или ^product/([^/]*)$
- и обработал бы его дальшеваш сценарий или что-то еще.Но это в некоторой степени зависит от того, с чем вы его используете, и, поскольку вы этого не указали, я не могу помочь сразу.