C#解析RegexOptions

时间:2015-11-18 23:03:59

标签: c# regex

我有一个函数可以将用户提供的正则表达式与字符串进行比较,并且它们能够在其中包含标志,但只能在正则表达式字符串中。那个字符串可能看起来像 (?!.*(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
}

1 个答案:

答案 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());

<强> 修改 看到你的评论之后你的问题就更清楚了,但仍有一些我不确定的东西。无论如何,我已经对代码进行了一些更改,这可能就是你一直在寻找的东西,它已经很晚了,我有点急,所以请看上面代码的注意事项。希望它能解决你的问题