0

让我们取一个像这样的网址

www.url.com/some_thing/random_numbers_letters_everything_possible/set_of_random_characters_everything_possible.randomextension

如果我想捕获“set_of_random_characters_everything_possible.randomextension”会[^/\n]+$起作用吗?(解决方案取自Trying to get the last part of a URL with Regex

我的问题是:“\n”部分是什么意思(即使没有它也可以工作)?而且,如果 url 具有最随意的字符组合“/”,它是否安全?

4

2 回答 2

2

首先,请注意这www.url.com/some_thing/random_numbers_letters_everything_possible/set_of_random_characters_everything_possible.randomextension不是一个没有http://前面那样的方案的 URL。

其次,不要自己解析 URL。您使用什么语言?您可能不想使用正则表达式,而是使用已经编写、测试和调试过的现有模块。

如果您使用的是 PHP,则需要该parse_url功能。

如果您使用 Perl,则需要该URI模块。

于 2012-12-27T17:52:40.183 回答
1

看看这个解释:http ://regex101.com/r/jG2jN7

基本上这里发生的是“匹配除斜线和换行符之外的任何字符,无限到 1 次”。人们插入\r\n否定字符类,因为在某些程序中,否定字符类将匹配除已插入的内容之外的任何内容。[^/]在这种情况下匹配新行也是如此。

例如,如果您的文本中有换行符,您将无法获取换行符之后的数据。

但是,在您的情况下并非如此。您需要(PCRE_DOTALL)为此行为使用 s 标志。

TL;DR:您可以留下或删除它,这无关紧要。

询问是否有任何不清楚的地方,或者我解释得有点草率。

于 2012-12-27T17:26:56.063 回答