我是RegEx的新手并且无法获得模式 请求第一行看起来像
GET /someFolder/someSubfolder/someFile.fileExtenstion?param1=abc HTTP/1.1
我想检查一下是否存在正确的图像 意思是第一个单词GET稍后有一些有效的URL而不是HTTP / verison 我到现在所拥有的是
string input = line;
Match match = Regex.Match(input, @"GET /([A-Za-z0-9-.+!*'();:@&=+$,/?%#[]])\ HTTP/1.1",
RegexOptions.IgnoreCase);
// check the Match instance.
if (match.Success)
{
string URL = match.Groups[1].Value;
}
但我没有比赛 我错过了什么?
答案 0 :(得分:1)
您可以将正则表达式简化为
^GET.*HTTP\/1\.1$
^
将正则表达式固定在字符串的开头。
.*
匹配任何内容
$
将正则表达式锚定在字符串的末尾。确保没有任何内容跟随匹配的字符串
答案 1 :(得分:0)
旧问题,但对于任何寻求正确匹配HTTP起始行并从中提取值的人来说,它都应该提供新的答案。
(。* )将不匹配空格,也将 C#中不必要的正斜杠转义,并且将导致不匹配。
以下是带有命名捕获组的示例代码:
var httpRegex = new Regex(@"^(?<method>[a-zA-Z]+)\s(?<url>.+)\sHTTP/(?<major>\d)\.(?<minor>\d+)$");
var match = httpRegex.Match("GET http://www.google.com HTTP/1.1");
if (match.Success)
{
Console.WriteLine(
$"Method: {match.Groups["method"].Value}\r\n" +
$"Url: {match.Groups["url"].Value}\r\n" +
$"httpVersion: HTTP/{match.Groups["major"].Value}.{match.Groups["minor"].Value}"
);
}
在PHP和JavaScript之类的语言中转义所需的正斜杠,此处与在PHP中使用相同的代码转义https://regex101.com/r/2l7k83/1/