Регулярное выражение — URL с определенным началом и заканчивается чем-то в середине

#regex

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

Вопрос:

Я хотел бы выбрать все строки (части URL-адресов) с «/ en» в начале, затем случайную строку в середине и в конце «aspx», например «/ru/about-us-or /any-other-string-12345/page.aspx»

Вот мой текущий подход.

 ^/en.*aspx$
  
  • ^/en — в начале «/en»

  • .* — затем случайная строка в середине

  • aspx$ — и aspx в конце

Интересно, почему это не работает. Есть идея?

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

1. Определите «не работает». Что вы получаете? И какое программное обеспечение запускает это регулярное выражение?

2. Согласно моим источникам ( regexhero.net/tester ) это работает. Проблема может быть в другом месте вашего кода.

Ответ №1:

Я предполагаю, что ваши входные строки представляют собой полные URI (например, так: «http://www.example.com/en/about-us-or/any-other-string-12345/page.aspx «).

Если это так, ваше регулярное выражение завершится ошибкой, потому что флаг ^ соответствует началу строки, которая в данном случае находится прямо перед h в http.

Символ $ также приведет к сбою регулярного выражения в URI, которые выглядят следующим образом «http://www.example.com/en/about-us-or/any-other-string-12345/page.aspx?parameter=value «.

Редактировать: Чтобы действительно ответить на ваш вопрос — попробуйте удалить ^ и $ из вашего регулярного выражения: /en.*aspx

Ответ №2:

символ / имеет особое значение в регулярном выражении — поэтому вам придется экранировать его (/) также сгруппируйте звездочку (.*) :

 ^/en(.*)aspx$
  

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

1. Вышеуказанное работает с движками регулярных выражений Java и JavaScript. какой язык / движок вы используете?

Ответ №3:

Я предполагаю, что вы используете это как часть .htaccess правила перезаписи. URL-путь, представленный в RewriteRule, зависит от каждого каталога и никогда не будет иметь инициала / (он удален). Попробуйте удалить инициал / из вашего шаблона следующим образом:

 ^en/(.*).aspx$