2016-01-21 2 views
1

Использование регулярных выражений в IIS URL Rewrite (Microsoft)Regex, что соответствует, если элемент в середине строки или конец строки

Я пытаюсь написать регулярное выражение, которое будет фиксировать НазваниеКомпании/НазваниеКомпании только в одном из следующих действий:

Get-участие/компания/НазваниеКомпания-2

получить вовлеченные/компанию/НазваниеКомпании

получить вовлеченный/компанию/НазваниеКомпания-5

получить вовлеченные/компанию/НазваниеКомпании

Так быть ясно, что я хочу, чтобы захватить только переменную CompanyName, которая может или не может иметь косую -[0-9] НО я не хочу задн -[0-9]

У меня есть следующий но его не так, как она включает в себя -2, когда он присутствует

get-involved/companies/((.*)|((.*)(-[0-9]))) 
+0

Как насчет 'get-involved \/companies \/(. *?) (- [0-9])? $' -> https://regex101.com/r/hP7zN4/1 –

+2

(1) As всегда с вопросами регулярного выражения, пожалуйста, укажите язык или инструмент, который вы используете, потому что мы находимся в лабиринте извращающихся небольших регулярных выражений, все немного отличается. (2) Вы пытаетесь захватить буквенную строку 'company-? Name', или что-то еще до дефиса и цифры или что? –

+0

Использование регулярного выражения в IIS Url Rewrite (Microsoft). Я хочу захватить только имя компании или имя компании, но не - [0-9] – wingyip

ответ

0

Этот ответ будет работать с JS или PHP, но, как заметил @tom Зых, некоторые небольшие технические характеристики могут быть различными с IIS Url Rewrite, что я не использую: так что вам решать.

Вот сказал, вы можете использовать followin регулярное выражение:

^get-involved/companies/([^-]*)-?([^-]*)?(?:-[0-9])$ 

затем использовать следующую замену:
$1$2

0

Это должно сделать трюк:

get-involved\/companies\/(?:(.+(?=-[0-9]))|(.+\b)) 

В основном Основная идея заключается в использовании чередования в категории , не фиксирующихся. Первая альтернатива соответствует любой фразе, которая заканчивается на - [0-9], используя положительный lookahead, а второй соответствует чему-либо, пока не достигнет границы слова (или вы можете использовать привязку конца строки).

Вы можете проверить его с помощью regex101

+0

Почему downvote ?! Это эффективное решение! –

0

Вы можете просто указать, что дефис должен сопровождаться алфавитным.

get-involved/companies/([^/-]+(-[a-z][^/-]+)*) 

Если у вас есть название компании, как 3com этого не будет работать правильно; возможно, обновите свой вопрос с более подробными требованиями в этом случае.

Смежные вопросы