多个字符串在正则表达式中具有特殊字符

时间:2019-06-21 06:55:52

标签: c# regex

  

我是正则表达式的新手,我需要找到“ /./”或   字符串中的“ /../”。我的程序如下所示,

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,正则表达式匹配应该成功。

2 个答案:

答案 0 :(得分:2)

您的msal.js(= [/./]+[/../])正则表达式匹配1+ [/.]+[/.]/个字符,后跟一个./。因此,它可以与协议部分中的......./,当然还有/////////////匹配。

如果您不必使用正则表达式,则可以简单地使用//

.Contains

请参阅此C# demo

您也可以使用以下正则表达式:

if (s.Contains("/../") || s.Contains("/./"))  { ... }

请参见this regex demoregex graph

enter image description here

详细信息

  • bool b = Regex.IsMatch(OrginalURL, @"/\.{1,2}/"); -一个/字符
  • /-1或2个点
  • \.{1,2}-一个/字符。

答案 1 :(得分:0)

虽然这不是执行此任务的最佳方法,但表达式类似于:

\/\.{1,2}(?=\/)

可能会工作。

Demo

  

转义仅用于演示目的,您可以将其删除。

测试

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);
        }
    }
}