我有一个函数可以将用户提供的正则表达式与字符串进行比较,并且它们能够在其中包含标志,但只能在正则表达式字符串中。那个字符串可能看起来像
(?!.*(alpha|beta|chi)).*standard.*/s
并且需要取出/s
。我知道我可以通过||
传递多个RegexOptions,但是我可以创建一些对象来传递找到的任何标志吗?我不知道他们是会发送一个或多个国旗,它可以是任何组合。
String flags = "";
if(Regex.IsMatch(regex, "/x*s*m*i*")){
flags = Regex.Match(regex, "/x*s*m*i*").ToString();
Regex.Replace(regex, "/x*s*m*i*", "");
}
if (flags.Contains('x')) {
#add to some array/list of RegexOptions to pass as parameter
} else if (flags.Contains('i')) {
#add to some array/list of RegexOptions to pass as parameter
} else if ((flags.Contains('s'))) {
#add to some array/list of RegexOptions to pass as parameter
} else if (flags.Contains('m')) {
#add to some array/list of RegexOptions to pass as parameter
}
if (Regex.IsMatch(source_box.Text, regex, /*Array/list of any number of RegexOptions*/))
{
//Match found
}
答案 0 :(得分:0)
你的问题很不清楚,所以我只会回答其中的一部分,你似乎完全滥用了正则表达式,我建议你再次回顾一下你想要达到的目标,并阅读有关正则表达式的更多内容。
至于我非常肯定的部分:您是否考虑过将正则表达式的参数传递给正则表达式,但是,例如,通过复选框。当然,如果放置参数无关紧要 - 我真的不知道你想要实现什么。如果每个参数最多可以使用一次,那么肯定 if语句在您发布的代码中间不好,要包含混合的选项集,它应该看起来像这样
编辑 (特定条件下的选项与这些字母相关的实际正则表达式选项不对应,它们仅作为示例随机使用)
string flags = "/x/i/m";
RegexOptions regExOpts = RegexOptions.None;
if (flags.Contains('x')) {
regExOpts |= RegexOptions.Multiline;
}
if (flags.Contains('i')) {
regExOpts |= RegexOptions.IgnoreCase;
}
if (flags.Contains('s')) {
regExOpts |= RegexOptions.Singleline;
}
if (flags.Contains('m')) {
regExOpts |= RegexOptions.ExplicitCapture;
}
MessageBox.Show(regExOpts.ToString());
<强> 修改 强> 看到你的评论之后你的问题就更清楚了,但仍有一些我不确定的东西。无论如何,我已经对代码进行了一些更改,这可能就是你一直在寻找的东西,它已经很晚了,我有点急,所以请看上面代码的注意事项。希望它能解决你的问题