使用不同的URI模式尝试找出正确的正则表达式来覆盖所有这些,例如:
1)href =“http://site.example.com/category/ 和 2)href =“http://site.example.com/en/page/
使用href =“。+ .. + .. + /(。+?)”尊重第一个网址,在第二个网址中跳过页面。
如何在href =“http://site.example.com/?
之后阅读所有内容答案 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:/
。并且 匹配您的两个示例(使用egrep
和grep -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
。