以下是网址的正则表达式:
(?<protocol>http|ftp)://(?<domain>[^/\r\n]+)(?<path>/[^\r\n]*)?
我想知道怎么翻译?如每个字符/标志的含义。
我知道:
(?<protocol>http|ftp)://
::'protocol'是分组名称
http|ftp
- http OR ftp
://
必须是这些字符
然后我想澄清以下内容:
`(?<domain>[^/\r\n]+)(?<path>/[^\r\n]*)?`
谢谢
答案 0 :(得分:0)
当您指定(?<text>(regex))
时,您正在执行的操作是为捕获组指定分组名称。捕获组可以分割数据的匹配方式。
例如:(http | ftp)\:只有一个捕获组,但匹配(http OR ftp)和:
字符。未在捕获组中指定后者的地方。
捕获组在许多情况下都很有用,比如bash或Python,你需要一组特定的数据。所以,如果我只想要http或ftp,但我想确保它后跟':',我会指定我想要捕获组0。
现在回到正则表达式。
单独的正则表达式(这将匹配http://google.com
)没有分组名称:
(http|ftp)\:\/\/([^/\r\n]+)(\/[^\r\n]*)
(http|ftp)
::匹配'http'或'ftp'。
\:
::匹配':'字符。
\/
::匹配'/'字符。
([^/\r\n]+)
::匹配任何不在集合中的字符和一个或多个匹配项。表示任何不是'/'的字符,返回字符或新行。
([^\r\n]*)
::匹配任何字符以及不在集合中的零个或多个匹配项。见上文。
现在,以下只是URL的最后两部分。网址由protocol://domain/path
(?<domain>[^/\r\n]+)(?<path>/[^\r\n]*)?