17

我有一个使用new Regex(string pattern)构造函数创建的正则表达式对象,之后有没有办法查看正则表达式对象是用什么模式创建的?

我似乎无法访问正则表达式或RegexOptions对象中的“模式”字符串成员。

上下文:我要问的原因是我在初始化时早期创建了一些正则表达式对象(模式存储在配置文件中),然后它们被传递给不同的类以经常使用。但是,我还需要将模式字符串与运行时存储在 SQL 数据库中的字符串进行比较。

除了正则表达式对象之外,我宁愿不必传递带有模式的字符串。我也觉得在启动时创建一次对象不是一个坏主意,因为正则表达式会被重复使用数百次?

随时提供替代建议。

4

2 回答 2

42

因此,在调试器中,将光标悬停在正则表达式对象上会显示模式,因此必须关闭。原来 Regex.ToString() 返回模式。

ToString:返回传递给 Regex 构造函数的正则表达式模式。

于 2012-08-19T03:32:14.400 回答
6

看起来你不能这样做,因为该Regex.Pattern字段被标记为内部。

您说得对,创建一次对象并多次重用它是个好主意,但是将字符串作为另一个参数传递可能是您唯一的选择。

如果你真的想避免这样做,你可以创建一个继承自 Regex 的新类,然后在构造函数中设置 Pattern 属性,如下所示:

public class MyRegex : Regex
{
    public String Pattern {protected set; get;}
    public MyRegex(String Pattern) : Regex(Pattern)
    {
            this.Pattern = Pattern;
    }
}
于 2012-08-19T02:53:05.430 回答