我有一个输入,它从用户那里得到一个声明。根据我的程序的使用情况,用户可以输入一个字符或者一个正则表达式。填写此输入后,用户必须填写第二个输入,即替换文本。
问题是,用户可以键入.
,这相当于一个正则表达式,它匹配任何字符。
下面的代码有效吗?或者,有什么解决办法?
Match m = Regex.Match(input, pattern);
if( m.Success )
// it's regex
else
// it's not regex
如果用户输入...?
,您无法知道他们是要匹配文字"...?"
,还是使用它作为正则表达式匹配 2-3 个字符。
如果我搜索hello?
,我可能不会期望匹配"hell"
。但我可能是故意的。你不问是不知道的。
给他们一个复选框!
你不能*。
让我们看看 Visual Studio 是如何解决这个问题的:
由于您无法判断用户是否希望内容成为正则表达式,因此设计器允许用户选择,让用户完全控制他们希望如何执行搜索。如果您希望它是纯文本(默认),只需点击查找下一个。否则,您可以使用其他选项定制您的搜索。
*好吧,你可以
解决此问题的另一种方法是假设用户打算使用您支持的每种技术进行搜索,然后过滤结果;按“纯文本”匹配和“正则表达式”匹配分组。这效率较低,但可以认为对用户更友好,因为用户不必主动选择任何选项。因此,您首先仅通过纯文本搜索,并在“纯文本匹配”标题下返回这些匹配项,然后假设字符串是正则表达式进行搜索,并在“正则表达式匹配”标题下返回这些匹配项
一旦您向用户展示了这些内容,他们就可以选择他们实际要替换的内容。