C# 将用户定义的伪正则表达式字符串转换为工作正则表达式
要匹配的字符串C# 将用户定义的伪正则表达式字符串转换为工作正则表达式,c#,.net,regex,.net-4.5,C#,.net,Regex,.net 4.5,要匹配的字符串www。ads://fkdsmkdsf.mysite.comkmdfgkkdf 伪正则表达式模式:*://*mysite.com* 所需的正则表达式模式*?\://.*mysite\\.com.*? 我的代码: string srinput = "www.ads://fkdsmkdsf.mysite.comkmdfgkkdf"; string srRegexPattern = "*://*mysite.com*"; List<string> lstRegexSpeci
www。ads://fkdsmkdsf.mysite.comkmdfgkkdf
伪正则表达式模式:*://*mysite.com*
所需的正则表达式模式*?\://.*mysite\\.com.*?
我的代码:
string srinput = "www.ads://fkdsmkdsf.mysite.comkmdfgkkdf";
string srRegexPattern = "*://*mysite.com*";
List<string> lstRegexSpecialCharList = new List<string> {
"^", "$", ".", "?", "+", "(", ")", "[", "{", "]", "}",
"\\","=","<",">",":","-" };
foreach (var item in lstRegexSpecialCharList)
{
srRegexPattern = srRegexPattern.Replace(item, "\\" + item);
}
srRegexPattern = srRegexPattern.Replace("*", ".*?");
bool blResult = Regex.IsMatch(srinput, srRegexPattern);
string srinput=“www。ads://fkdsmkdsf.mysite.comkmdfgkkdf";
字符串srregexpatern=“*://*mysite.com*”;
List lstRegexSpecialCharList=新列表{
"^", "$", ".", "?", "+", "(", ")", "[", "{", "]", "}",
"\\","=","",":","-" };
foreach(lstRegexSpecialCharList中的变量项)
{
srregexpatern=srregexpatern.Replace(项目“\\”+项目);
}
srregexpatern=srregexpatern.Replace(“*”,“*?”);
bool blResult=Regex.IsMatch(srinput,srregexpatern);
但是,似乎我没有正确地创建它,因为生成的正则表达式无法匹配我的输入字符串。匹配您的输入字符串的正则表达式模式是
*?\://.*mysite\.com.*
。双反斜杠\\
将与文本\
匹配
您不需要任何特殊字符列表,Regex.Escape()
为您完成所有操作
string srinput = "www.ads://fkdsmkdsf.mysite.comkmdfgkkdf";
string srRegexPattern = "*://*mysite.com*";
srRegexPattern = Regex.Escape(srRegexPattern).Replace("\\*", ".*?");
bool blResult = Regex.IsMatch(srinput, srRegexPattern);
输出正则表达式如预期的那样:
*?://.*mysite\.com.*?
匹配输入字符串的正则表达式模式是*?\://.*mysite\.com.*?
。双反斜杠\\
将与文本\
匹配
您不需要任何特殊字符列表,Regex.Escape()
为您完成所有操作
string srinput = "www.ads://fkdsmkdsf.mysite.comkmdfgkkdf";
string srRegexPattern = "*://*mysite.com*";
srRegexPattern = Regex.Escape(srRegexPattern).Replace("\\*", ".*?");
bool blResult = Regex.IsMatch(srinput, srRegexPattern);
输出正则表达式如预期的那样:
*?://.*mysite\.com.*?
匹配输入字符串的正则表达式模式是*?\://.*mysite\.com.*?
。双反斜杠\\
将与文本\
匹配
您不需要任何特殊字符列表,Regex.Escape()
为您完成所有操作
string srinput = "www.ads://fkdsmkdsf.mysite.comkmdfgkkdf";
string srRegexPattern = "*://*mysite.com*";
srRegexPattern = Regex.Escape(srRegexPattern).Replace("\\*", ".*?");
bool blResult = Regex.IsMatch(srinput, srRegexPattern);
输出正则表达式如预期的那样:
*?://.*mysite\.com.*?
匹配输入字符串的正则表达式模式是*?\://.*mysite\.com.*?
。双反斜杠\\
将与文本\
匹配
您不需要任何特殊字符列表,Regex.Escape()
为您完成所有操作
string srinput = "www.ads://fkdsmkdsf.mysite.comkmdfgkkdf";
string srRegexPattern = "*://*mysite.com*";
srRegexPattern = Regex.Escape(srRegexPattern).Replace("\\*", ".*?");
bool blResult = Regex.IsMatch(srinput, srRegexPattern);
输出正则表达式与预期一样:
*?://.*mysite\.com.*?
问题:
在所有这些替换调用之后,您的模式字符串变成“*?\\://.*?mysite\\\\\.com.*”
基本上,在mysite
之后,这种模式必须匹配一个'\'
字符和一些任意符号
这怎么会发生?让我们看看您的替换循环和带有字符串替换的列表:
List<string> lstRegexSpecialCharList = new List<string>
{
"^", "$", ".", "?", "+", "(", ")", "[", "{", "]", "}",
"\\", // The culprit
"=", "<", ">", ":", "-"
};
foreach (var item in lstRegexSpecialCharList)
{
srRegexPattern = srRegexPattern.Replace(item, "\\" + item);
}
p.S.:在任何情况下,这种解决方案看起来都有点不可靠(可能存在一些未考虑的替换情况),并且由于多次调用
Replace
可能会出现一些性能问题(可以通过替换字符串的字典查找和更精简的模式构建(例如使用StringBuilder)来解决).问题:
在所有这些替换调用之后,您的模式字符串变成“*?\\://.*?mysite\\\\\.com.*”
基本上,在mysite
之后,这种模式必须匹配一个'\'
字符和一些任意符号
这怎么会发生?让我们看看您的替换循环和带有字符串替换的列表:
List<string> lstRegexSpecialCharList = new List<string>
{
"^", "$", ".", "?", "+", "(", ")", "[", "{", "]", "}",
"\\", // The culprit
"=", "<", ">", ":", "-"
};
foreach (var item in lstRegexSpecialCharList)
{
srRegexPattern = srRegexPattern.Replace(item, "\\" + item);
}
p.S.:在任何情况下,这种解决方案看起来都有点不可靠(可能存在一些未考虑的替换情况),并且由于多次调用
Replace
可能会出现一些性能问题(可以通过替换字符串的字典查找和更精简的模式构建(例如使用StringBuilder)来解决).问题:
在所有这些替换调用之后,您的模式字符串变成“*?\\://.*?mysite\\\\\.com.*”
基本上,在mysite
之后,这种模式必须匹配一个'\'
字符和一些任意符号
这怎么会发生?让我们看看您的替换循环和带有字符串替换的列表:
List<string> lstRegexSpecialCharList = new List<string>
{
"^", "$", ".", "?", "+", "(", ")", "[", "{", "]", "}",
"\\", // The culprit
"=", "<", ">", ":", "-"
};
foreach (var item in lstRegexSpecialCharList)
{
srRegexPattern = srRegexPattern.Replace(item, "\\" + item);
}
p.S.:在任何情况下,这种解决方案看起来都有点不可靠(可能存在一些未考虑的替换情况),并且由于多次调用
Replace
可能会出现一些性能问题(可以通过替换字符串的字典查找和更精简的模式构建(例如使用StringBuilder)来解决).问题:
在所有这些替换调用之后,您的模式字符串变成“*?\\://.*?mysite\\\\\.com.*”
基本上,在mysite
之后,这种模式必须匹配一个'\'
字符和一些任意符号
这怎么会发生?让我们看看您的替换循环和带有字符串替换的列表:
List<string> lstRegexSpecialCharList = new List<string>
{
"^", "$", ".", "?", "+", "(", ")", "[", "{", "]", "}",
"\\", // The culprit
"=", "<", ">", ":", "-"
};
foreach (var item in lstRegexSpecialCharList)
{
srRegexPattern = srRegexPattern.Replace(item, "\\" + item);
}
p.S.:在任何情况下,这种解决方案看起来都有点不可靠(可能存在一些未考虑的替换情况),并且由于多次调用
Replace
可能会出现一些性能问题(可以通过替换字符串的字典查找和更精简的模式构建(例如使用StringBuilder)来解决).你想匹配什么?你是说给定一个伪正则表达式模式(例如,用户可能输入的内容),你想将其转换为正则表达式模式?你想匹配什么?你是说给定一个伪正则表达式模式(例如,用户可能输入的内容),你想将其转换为正则表达式模式?你想匹配什么?你是说给定一个伪正则表达式模式(例如用户可能输入的东西),你想将其转换为正则表达式模式?你想匹配什么?你是说给定一个伪正则表达式模式(例如用户可能输入的东西),要将其转换为正则表达式模式吗?简单而优雅的解决方案简单而优雅的解决方案简单而优雅的解决方案简单而优雅的解决方案简单而优雅的解决方案