URL переписывает регулярное выражение - PullRequest
1 голос
/ 21 сентября 2011

Использование ASP.NET и попытка реализовать дружественную переписывание URL, но у меня есть куча времени на работу с регулярным выражением. По сути, я проверяю URL, следующий непосредственно за доменом, чтобы увидеть, использует ли он франко-канадскую культуру, или это число, а не число, за которым следуют символы. Мне нужно поймать все, что начинается с 'fr-ca' ИЛИ ​​числа, и оба сценария могут иметь завершающий символ '/' (косая черта), но это все ...

fr-ca - ХОРОШО
FR-CA / - ХОРОШО
FR-CA / 625 - ХОРОШО
FR-CA / GD - ПЛОХОЙ
fr-ca43 / - ПЛОХОЙ

1234 - ХОРОШО
1234 / - ХОРОШО
1234 / г - ХОРОШО
1234 г - ПЛОХОЙ
1g34 - ПЛОХОЙ

Вот что я придумала: ^ (фр-ка)? /? ([0-9] +)? Но, похоже, он работает не так, как я хочу ... поэтому я начал все заново и нашел (^ fr-ca) | (^ [0-9]), который все еще не работает так, как я хочу. Пожалуйста помоги!

Ответы [ 4 ]

2 голосов
/ 21 сентября 2011

А как же

^(fr-ca(?:\/\d*)?|[0-9]+(\/[a-zA-Z]*)?)$

Посмотрите его здесь на Regexr , оно соответствует всем вашим хорошим случаям, а не плохим.

2 голосов
/ 21 сентября 2011

понятия не имею об Asp.net, но регулярное выражение было протестировано с помощью grep. вы можете попробовать в вашей .net коробке:

kent$  cat a
fr-ca
fr-ca/
fr-ca/625
fr-ca/gd
fr-ca43/
1234
1234/
1234/g
1234g
1g34

обновлено

kent$  grep -P "(^fr-ca$|^\d+$|^(fr-ca|\d+)/(\w|\d*)$)" a
fr-ca
fr-ca/
fr-ca/625
1234
1234/
1234/g

-

ну, это может быть не лучшим регулярным выражением, но будет самым простым.

соответствует строке

^fr-ca$
or ^\d+$
or ^(fr-ca|\d+)/(\w|\d*)$

the above line can be broken down as well
  ^(fr-ca|\d+)/(\w|\d*)$ :

starting with fr-ca or \d+
then comes "/"
after "/" we expect \w or \d*
then $(end)
1 голос
/ 21 сентября 2011
^(\d+(\/\w*)?)$|^(fr-ca\/\d+)$|^(fr-ca\/?)$

Это сработало для меня на всех ваших примерах. Я не уверен, что вы собираетесь использовать это регулярное выражение, поэтому я не знаю, захватывает ли оно именно то, что вы хотите захватить.

1 голос
/ 21 сентября 2011

Вероятно, можно попробовать ...

^(fr-ca|\d).*$

Но, конечно, это регулярное выражение, совпадающее со всей строкой (поскольку оно имеет привязку конца строки $) Хотите вывести несколько матчей?

В свете перечитывания поста:)

^(fr-ca|\d+)(\/\d+|\/)?$

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...