匹配正则表达式中的可选斜杠

时间:2017-12-22 10:41:39

标签: c# regex regex-group

我需要一个匹配三个" /"之间前两个单词的正则表达式。 url中的字符:例如。在/ en / help / test / abc / def中它应匹配/ en / help /。

我使用这个正则表达式:/.*?/(.*?)/但是有时我的网址没有像/ en / help这样的最后一个斜线因为缺少最后一个斜杠而不匹配。

你能帮助我调整正则表达式只匹配" / en / help"部分?感谢

2 个答案:

答案 0 :(得分:3)

解决问题的一种简单方法是用贪婪的/opt/plesk/php/7.1/etc替换不情愿的(.*?)/

([^/]*)

如果有一个斜杠,则会停在第三个斜杠处;如果没有最终的斜杠,则会在字符串的末尾停止。

请注意,您可以使用相同的/.*?/([^/]*) 表达式替换.*?以保持一致性:

[^/]*

答案 1 :(得分:1)

如果字符包含字母数字,则可以使用以下模式:

static void Main(string[] args)
{
    string s1 = "/en/help/test/abc/def";
    string s2 = "/en/help ";
    string pattern = 
        @"(?ix)   #Options
          /       #This will match first slash
          \w+     #This will match [a-z0-9]
          /       #This will match second slash
          \w+     #Finally, this again will match [a-z0-9] until 3-rd slash (or end)";
    foreach(string s in new[] { s1, s2})
    {
        var match = Regex.Match(s, pattern);
        if (match.Success) Console.WriteLine($"Found: '{match.Value}'");
    }
}