我是正则表达式的新手,我需要找到“ /./”或 字符串中的“ /../”。我的程序如下所示,
String Path1 = "https://18.56.199.56/Directory1/././Directory2/filename.txt";
String Path2 = https://18.56.199.56/Directory1/../../Directory2/filename.txt";
String Path3 = "https://18.56.199.56/Directory1/Directory2/filename.txt";
Regex nameRegex = new Regex(@"[/./]+[/../]");
bool b = nameRegex.IsMatch(OrginalURL);
该代码也为Path3提供了真实性(也没有任何“。”或“ ..”字符串)。
似乎表达式“ Regex nameRegex = new Regex(@“ [/./]+[/../]”);“是不正确的。请更正此表达式。
对于路径1或路径2,而不是路径3,正则表达式匹配应该成功。
答案 0 :(得分:2)
您的msal.js
(= [/./]+[/../]
)正则表达式匹配1+ [/.]+[/.]
或/
个字符,后跟一个.
或/
。因此,它可以与协议部分中的.
,....../
,当然还有/////////////
匹配。
如果您不必使用正则表达式,则可以简单地使用//
:
.Contains
请参阅此C# demo。
您也可以使用以下正则表达式:
if (s.Contains("/../") || s.Contains("/./")) { ... }
请参见this regex demo和regex graph:
详细信息
bool b = Regex.IsMatch(OrginalURL, @"/\.{1,2}/");
-一个/
字符/
-1或2个点\.{1,2}
-一个/
字符。答案 1 :(得分:0)
虽然这不是执行此任务的最佳方法,但表达式类似于:
\/\.{1,2}(?=\/)
可能会工作。
转义仅用于演示目的,您可以将其删除。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\/\.{1,2}(?=\/)";
string input = @"https://18.56.199.56/Directory1/./Directory2/filename.txt
https://18.56.199.56/Directory1/././Directory2/filename.txt
https://18.56.199.56/Directory1/../../../Directory2/filename.txt
https://18.56.199.56/Directory1/./../.../Directory2/filename.txt
https://18.56.199.56/Directory1/Directory2/filename.txt";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}