[英]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.