繁体   English   中英

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

[英]Multiple strings have special characters in 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(@”[/./]+ [/。/]“);” 不是真的。 请理解这个表达方式。

正则表达式匹配应该是Path1或Path2的成功,而不是Path3。

你的[/./]+[/../] (= [/.]+[/.] )正则表达式匹配1+ /. chars后跟一个/. 因此它可以匹配......////////////// ,当然//在协议部分。

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

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

看到这个C#演示

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

bool b = Regex.IsMatch(OrginalURL, @"/\.{1,2}/");

看到这个正则表达式演示正则表达式图

在此输入图像描述

细节

  • / - a / char
  • \\.{1,2} - 1或2个点
  • / - a / char。

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

\/\.{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);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM