如何编码正确的 URI 正则表达式
how to code correct URI regex
有不同的 URI 模式试图找出正确的正则表达式来覆盖所有这些,例如:
1) href="http://site.example.com/category/
和
2) href="http://site.example.com/en/page/
使用 href=".+..+..+/(.+?)" 尊重第一个 url,第二个 url 跳过 en/page.
如何阅读 href="http://site.example.com/ 之后的所有内容?
应该这样做:
[^\./]+\.[^\./]+\.[^\./]+(?:/(.*))?
即:
[^\./]+
=(除 .
和 /
之外的任何值)
\.
= 点
...?
= ...
出现零次或一次
(?:...)?
= ...
中的零个或一个,多于一个字符,但不捕获 ...
.
(?:/(.*))?
= 捕获最后一个 /
之后的所有内容,如果有的话。
已测试here。
.
在正则表达式中表示 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:/
。它 确实 匹配您的两个示例(使用 egrep
和 grep -P
测试),但前提是您将 href="
替换为 href=\"
并保留最后一个 "
。否则它将匹配 none。
您可能想要的是:
.+\..+\..+/.*
或者,如果你想确保只匹配 urls,你可以考虑
http[s]?://([a-z]+\.)?[a-z]+\.[a-z]+/?[a-z/]?
http[s]?:
作为固定部分开始表达式(如果 ref 来自安全连接,则为 s)。 [a-z]
表示 match only lowercase letters
。您可能会偶然发现名称中没有子域的网站,例如 whosebug.com,第一个 [a-z]+\.
是问号。 url 的结尾也是斜线。 [a-z/]
表示 match only lowercase letters and slashes
.
有不同的 URI 模式试图找出正确的正则表达式来覆盖所有这些,例如:
1) href="http://site.example.com/category/ 和 2) href="http://site.example.com/en/page/
使用 href=".+..+..+/(.+?)" 尊重第一个 url,第二个 url 跳过 en/page.
如何阅读 href="http://site.example.com/ 之后的所有内容?
应该这样做:
[^\./]+\.[^\./]+\.[^\./]+(?:/(.*))?
即:
[^\./]+
=(除 .
和 /
之外的任何值)
\.
= 点
...?
= ...
出现零次或一次
(?:...)?
= ...
中的零个或一个,多于一个字符,但不捕获 ...
.
(?:/(.*))?
= 捕获最后一个 /
之后的所有内容,如果有的话。
已测试here。
.
在正则表达式中表示 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:/
。它 确实 匹配您的两个示例(使用 egrep
和 grep -P
测试),但前提是您将 href="
替换为 href=\"
并保留最后一个 "
。否则它将匹配 none。
您可能想要的是:
.+\..+\..+/.*
或者,如果你想确保只匹配 urls,你可以考虑
http[s]?://([a-z]+\.)?[a-z]+\.[a-z]+/?[a-z/]?
http[s]?:
作为固定部分开始表达式(如果 ref 来自安全连接,则为 s)。 [a-z]
表示 match only lowercase letters
。您可能会偶然发现名称中没有子域的网站,例如 whosebug.com,第一个 [a-z]+\.
是问号。 url 的结尾也是斜线。 [a-z/]
表示 match only lowercase letters and slashes
.