正则表达式模式匹配字符串基于"开始于"和"出现次数"

时间:2015-02-20 11:00:13

标签: c# regex

我只需找出那些以http://www.example.com/blog/开头的网址,而字符/的总数恰好是5

所以它不会匹配像

这样的网址
http://www.example.com/blog/category/cat-1/
http://www.example.com/blog/category/cat-2/
http://www.example.com/blog/tags/a-b-c/

它应该只匹配

之类的网址
http://www.example.com/blog/a-blog-title/
http://www.example.com/blog/another-blog-title/
http://www.example.com/blog/just-one-more-blog-title/

我在regxr上尝试了很多但是无法创建一个。

我将在C#中实现它(如果它有任何不同)。

提前致谢。

4 个答案:

答案 0 :(得分:2)

你想要这样的东西:

bool isMatch = Regex.IsMatch(str, "^http://www.example.com/blog/[^/]*/[^/]*$");

(以您的网址开头,有0-n个字符,后跟一个/,后跟0-n个字符,字符串的结尾)

答案 1 :(得分:1)

这应该可以解决问题:

Regex reg = new Regex(@"^http://www.example.com/blog/[^/]*/[^/]*/$");

答案 2 :(得分:1)

对于这类任务,我改为使用Uri类,例如(使用文本文件测试):

Uri uri = null;
var uris = File.ReadLines(filePath)
    .Where(l => Uri.TryCreate(l.Trim(), UriKind.Absolute, out uri))
    .Select(l => uri);

var validUris = uris
    .Where(u => u.Host == "www.example.com"
             && u.Segments.Length == 3
             && u.Segments[1] == "blog/");

答案 3 :(得分:1)

您可以尝试类似

的内容
^http://(?=www.example.com/blog/)([^/]*/){3}$

匹配任何以www.example.com/blog/开头的网址(在http://位之后)并且总共有5个,http://中有两个,后来有3个。

不太熟悉C#,所以我不知道如何最好地应用表达式。