正则表达式,找到网址的最后一部分

时间:2012-12-27 17:20:00

标签: regex preg-match

我们来一个像

这样的网址
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”部分意味着什么(即使没有它也可以工作)?并且,如果网址与“/”之间最偶然的字符组合是否安全?

2 个答案:

答案 0 :(得分:2)

首先,请注意www.url.com/some_thing/random_numbers_letters_everything_possible/set_of_random_characters_everything_possible.randomextension不是没有http://之类的方案的网址。

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

如果您使用的是PHP,则需要parse_url函数。

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

答案 1 :(得分:1)

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

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

例如,如果文本中有换行符,则在换行符后不会获得数据。

然而,在您的情况下,情况并非如此。您需要使用s-flag (PCRE_DOTALL)来解决此问题。

TL; DR:您可以保留或删除它,它不重要。

询问是否有任何不清楚或我已经解释得有点草率。