Regex для сравнения URL-адресов с подстановочным знаком, который чередуется (http://example.com/user/*/profile) - PullRequest
0 голосов
/ 25 июля 2010

У меня есть указанный пользователем URL, в котором есть подстановочный знак, например, http://example.com/project/*/account

В этом случае * может быть что угодно, число, символ или что-то еще.

Я хочу получить регулярное выражение, которое бы соответствовало этому. Расположение подстановочного знака * меняется и может быть http://example.com/user/*/title или http://example.com/user/*/*/*/delete (например, зависит от сайта ... поэтому все возможности должны поддерживаться)

Есть идеи или предложения, как это сделать? Я думал о том, чтобы просто получить код регулярного выражения для любого символа и заменить все вхождения * на этот код регулярного выражения. Затем сравните это с текущим URL-адресом, чтобы убедиться, что это совпадение.

Ответы [ 2 ]

1 голос
/ 25 июля 2010

Я думаю, что ваша идея должна работать.

Это то же самое, что глобусы реализованы в стандартной библиотеке Python.Глобус переводится в эквивалентное регулярное выражение с подстановочными знаками * и ?, переведенными в .* и ..В вашем случае вы бы заменили * на что-то вроде [^/]+.

Единственная проблема в этом подходе состоит в том, что вам придется экранировать все управляющие символы регулярного выражения, поэтому . необходимо заменить на \. и [ на \[ и т. Д.

0 голосов
/ 25 июля 2010

Вы можете использовать URITemplate , чтобы сделать это соответствие.

Вместо этого

http://example.com/user/*/title

Вы должны сделать это

http://example.com/user/{userId}/title

Вы сможете найти его версию на C # или создать ее самостоятельно, ссылаясь на код Java

Вот ссылка на Java источник

Но если вы хотите соответствовать * вместо использования шаблона URI, замените все вхождения '*' на '(.*)' и создайте регулярное выражение с этим недавно замененным URI. Тогда просто сделайте регулярное выражение test или match

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