0

我必须使用正则表达式从 URL 获取主机名和路径名。

URL 的形式可以是

a) http://test.com/mary/archive/project.aspx--> 我想要http::/test.com/mary
b) http://www.testmary.com/company--> 我想要http://www.testmary.com/
c) http://marytest.com/b/about/--> 我想要http://marytest.com/
d) http://mary.test.com/b/mary/project.aspx--> 我想要http://mary.test.com/b/mary/

基本上我正在寻找具有 url “mary” 的记录,并且根据“mary”的位置仅获取主机名或路径名。

任何帮助表示赞赏。

谢谢R

4

1 回答 1

2

为此,您不需要 CLR 和 RegEx。

DECLARE @x TABLE(id INT, url VARCHAR(2048));

INSERT @x VALUES
(1,'http://test.com/mary/archive/project.aspx'), 
    --> I want http::/test.com/mary
(2,'http://www.testmary.com/company'), 
    --> I want http://www.testmary.com/
(3,'http://marytest.com/b/about/'),
    --> I want http://marytest.com/
(4,'http://mary.test.com/b/mary/project.aspx'),
    --> I want http://mary.test.com/b/mary/
(5,'mary.test.com');
    --> I want mary.test.com

SELECT ID, 
  [output] = SUBSTRING(url, 1, LEN(url) - CHARINDEX('yram', REVERSE(url)) 
    + COALESCE(NULLIF(CHARINDEX('/', SUBSTRING(url,  LEN(url) - CHARINDEX('yram',  
      REVERSE(url)) + 1, 2048)),0),2048))
FROM @x
WHERE url LIKE '%mary%';

结果:

ID  output
--  --------------------------------
1   http://test.com/mary/
2   http://www.testmary.com/
3   http://marytest.com/
4   http://mary.test.com/b/mary/
5   mary.test.com

我唯一不明白的是为什么输出中的第一行应该缺少斜杠,而其他行包括它。在我的查询中,这个斜杠包含在所有行中。如果它不应该只包含在这一行中,您需要解释原因。

不过,我确实建议更好地处理数据清理。为什么你会允许一些没有 http:// 前缀的 URL?

于 2013-08-28T21:21:30.080 回答