我正在实现一个搜索功能(在TreeView中),用户可以选择打开/关闭正则表达式,以及打开/关闭匹配大小写和整个文本。
有没有办法让.NET Regex告诉它不处理正则表达式字符?如果是这样,那么我总是可以使用正则表达式查找匹配,即使正则表达式已关闭。
有一件事发生在我身上。对于这种情况,请转义搜索字符串中的所有特殊字符。这是一个坏主意,还是有效?
谢谢 - 戴夫
答案 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) | +---------+-------------------------------+-------------------------------------------------------------------+
其余的应该是直截了当的。