正则表达量词问题

时间:2010-05-05 11:09:39

标签: regex boost-regex

我试图找到一个匹配此类网址的正则表达式:

http://sub.domain.com/selector/F/13/K/100546/sampletext/654654/K/sampletext_sampletext.html

并且不匹配:

http://sub.domain.com/selector/F/13/K/10546/sampletext/5987/K/sample/K/101/sample_text.html

只有当/ K /的数量最小为1且最大为2时(带有{1,2}等量词的东西)

直到这一刻,我有以下正则表达式:

http://sub\.domain\.com/selector/F/[0-9]{1,2}/[a-z0-9_-]+/

现在我需要一只手来添加任何类型的条件,如:

如果在文本中出现/ K /最多1到2次,则匹配此项。

提前致谢。

最诚挚的问候。

Josema

2 个答案:

答案 0 :(得分:1)

你需要这一切吗?

我要采取的方法是为/K/做一个正则表达式,然后计算我得到的匹配数。

我认为Boost是一个C ++库吗?在C#中,我会这样做:

string url = "http://sub.domain.com/selector/F/13/K/100546/sampletext/654654/K/sampletext_sampletext.html";
if (Regex.Matches(url, "/K/").Count <= 2)
{
    // good url found
}

更新

此正则表达式将匹配前两个K的所有内容,然后仅允许url filename.html:

^http://sub.domain.com/selector/F/[\d]+/[a-zA-Z]+/[\d]+/[a-zA-Z]+/[\d]+/K/[a-zA-Z_]+\.html$

答案 1 :(得分:1)

此RE将匹配/ F / [0-9] {1,2}之后有1或2 / K /的任何内容,它也可以匹配http://sub.domain.com/selector/F/13/K/100546/stuff/21515/stuff/sampletext/654654/K/stuff/sampletext_sampletext.html

^http://sub\.domain\.com/selector/F/[0-9]{1,2}(?:/K(?=/)(?:(?!/K/)/[a-z0-9_.-]+)*){1,2}$