我可以打开/关闭正则表达式处理吗?

时间:2018-03-31 22:34:38

标签: c# .net regex

我正在实现一个搜索功能(在TreeView中),用户可以选择打开/关闭正则表达式,以及打开/关闭匹配大小写和整个文本。

有没有办法让.NET Regex告诉它不处理正则表达式字符?如果是这样,那么我总是可以使用正则表达式查找匹配,即使正则表达式已关闭。

有一件事发生在我身上。对于这种情况,请转义搜索字符串中的所有特殊字符。这是一个坏主意,还是有效?

谢谢 - 戴夫

1 个答案:

答案 0 :(得分:2)

根据您的问题猜测,您的用户界面如下所示:

[Lorem ipsum...   Search: _______________    
    ipsum...      [ ] case-insensitive       
    lorem ...  ]  [ ] regular expression    

因此,您有四种情况:案例/敏感&模式/短语。 要搜索简单的词组,请在搜索字符串上使用Regex.Escape()

+---------+-----------------------------------------------------+------------------------------------------------------------------------------+
|         |                        case-sensitive               |                               case-insensitive                               |
+---------+-----------------------------------------------------+------------------------------------------------------------------------------+
| pattern | Regex.Matches(input, "searchPattern")               | Regex.Matches(input, "searchPattern", RegexOptions.IgnoreCase)               |
| phrase  | Regex.Matches(input, Regex.Escape("searchPattern")) | Regex.Matches(input, Regex.Escape("searchPattern"), RegexOptions.IgnoreCase) |
+---------+-----------------------------------------------------+------------------------------------------------------------------------------+

或者,您可以使用String.IndexOf()搜索短语:

+---------+-------------------------------+-------------------------------------------------------------------+
|         |             case              |                      case-insensitive                             |
+---------+-------------------------------+-------------------------------------------------------------------+
| regex   | Regex.Matches(input, pattern) | Regex.Matches(input, pattern, RegexOptions.IgnoreCase)            |
| phrase  | input.IndexOf("searchString") | input.IndexOf("searchString", StringComparison.OrdinalIgnoreCase) |
+---------+-------------------------------+-------------------------------------------------------------------+

其余的应该是直截了当的。