我有一个从用户那里得到一个声明的输入。根据我的程序的用法,用户可以输入一个字符或正则表达式。填写完该输入后,用户必须填写第二个输入,即替换文本。如何识别字符串是否是正则表达式?
问题是,用户可以键入.
,这相当于一个正则表达式,它匹配任何字符。
下面的代码是否工作?或者,有什么解决方案?
Match m = Regex.Match(input, pattern);
if(m.Success)
// it's regex
else
// it's not regex
我有一个从用户那里得到一个声明的输入。根据我的程序的用法,用户可以输入一个字符或正则表达式。填写完该输入后,用户必须填写第二个输入,即替换文本。如何识别字符串是否是正则表达式?
问题是,用户可以键入.
,这相当于一个正则表达式,它匹配任何字符。
下面的代码是否工作?或者,有什么解决方案?
Match m = Regex.Match(input, pattern);
if(m.Success)
// it's regex
else
// it's not regex
你不能*。
让我们看看如何Visual Studio的解决了这个问题:
正如你不能告诉用户是否不希望的内容是一个正则表达式,设计师允许用户选择,让用户完全控制他们希望执行搜索的方式。如果你希望它是纯文本(默认),只需点击查找下一个。否则,您可以使用其他选项来定制您的搜索。
*好,你有种可以
另一种方法解决这个问题是假设意味着利用一切你支持的技术来搜索和筛选结果的用户;按“纯文本”匹配分组,和“正则表达式”匹配。这效率较低,但由于用户不主动选择任何选项,因此可以被认为更加用户友好。因此,您首先使用纯文本进行搜索,然后在标题“纯文本匹配”下返回匹配项,然后假设该字符串为正则表达式,然后在标题“正则表达式匹配”下返回这些匹配项。
一次你已经将这些显示给用户,他们可以选择他们实际替换的那一个。
如果用户键入...?
,则无法知道他们是要匹配文字"...?"
,还是将它用作正则表达式匹配2-3个字符。
如果我搜索hello?
,我可能不希望匹配"hell"
。 但我可能会故意这样做。 你不知道你是否不问。
给他们一个复选框!
冷静下来:)询问用户是我的第一种方式。 – miqbal
不可能,因为某些字符串(即使它们构成有效的REGEX模式)可能不适用于REGEX使用,并且您不知道这是否是这种情况。 – Utkanos
给他们分隔文本框或复选框。定义特定的格式来识别指定的表达式将永远有太多的例外,它将无法正常工作。 – MrFox