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