我需要一个匹配三个" /"之间前两个单词的正则表达式。 url中的字符:例如。在/ en / help / test / abc / def中它应匹配/ en / help /。
我使用这个正则表达式:/.*?/(.*?)/
但是有时我的网址没有像/ en / help这样的最后一个斜线因为缺少最后一个斜杠而不匹配。
你能帮助我调整正则表达式只匹配" / en / help"部分?感谢
答案 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}'");
}
}