如何编码正确的URI正则表达式

时间:2015-01-23 19:54:24

标签: regex regex-greedy

使用不同的URI模式尝试找出正确的正则表达式来覆盖所有这些,例如:

1)href =“http://site.example.com/category/ 和 2)href =“http://site.example.com/en/page/

使用href =“。+ .. + .. + /(。+?)”尊重第一个网址,在第二个网址中跳过页面。

如何在href =“http://site.example.com/?

之后阅读所有内容

2 个答案:

答案 0 :(得分:0)

这应该这样做:

[^\./]+\.[^\./]+\.[^\./]+(?:/(.*))?

那是:

[^\./]+ =(./以外的任何内容)
\. =点
...? = ...的零或一次出现 (?:...)? =零{或...之一,这是多个字符,但没有捕获...
(?:/(.*))? =捕获最后/之后的所有内容(如果有的话)。

经过测试 here

答案 1 :(得分:0)

正则表达式中的

.表示any character (except \n newline)+表示one or more of the previous expression?表示0 or 1 of previous expression; also forces minimal matching when an expression might match several strings within a search string(例如http://regexlib.com/CheatSheet.aspx)。
文字点与\.匹配。
所以你的正则表达式归结为at least five signs, a slash sign, at least one sign, but you don't have to
这意味着它甚至匹配http:/。并且 匹配您的两个示例(使用egrepgrep -P进行测试),但仅当您将href="替换为href=\"并离开时最后"出局。否则它将不匹配。
你可能想要的是:

.+\..+\..+/.*

或者,如果您想确保只匹配网址,可以考虑

http[s]?://([a-z]+\.)?[a-z]+\.[a-z]+/?[a-z/]?

作为固定部分的http[s]?:启动表达式(如果ref来自安全连接,则为s)。 [a-z]表示match only lowercase letters。由于您可能偶然发现了名称中没有像stackoverflow.com这样的子域名的网站,因此第一个[a-z]+\.会被标记。 url斜线的结尾也是如此。 [a-z/]表示match only lowercase letters and slashes