2012-06-30 59 views
1

我有一个从用户那里得到一个声明的输入。根据我的程序的用法,用户可以输入一个字符或正则表达式。填写完该输入后,用户必须填写第二个输入,即替换文本。如何识别字符串是否是正则表达式?

问题是,用户可以键入.,这相当于一个正则表达式,它匹配任何字符。

下面的代码是否工作?或者,有什么解决方案?

Match m = Regex.Match(input, pattern); 
if(m.Success) 
    // it's regex 
else 
    // it's not regex 
+3

不可能,因为某些字符串(即使它们构成有效的REGEX模式)可能不适用于REGEX使用,并且您不知道这是否是这种情况。 – Utkanos

+0

给他们分隔文本框或复选框。定义特定的格式来识别指定的表达式将永远有太多的例外,它将无法正常工作。 – MrFox

回答

2

你不能*。

让我们看看如何Visual Studio的解决了这个问题:

enter image description here

正如你不能告诉用户是否不希望的内容是一个正则表达式,设计师允许用户选择,让用户完全控制他们希望执行搜索的方式。如果你希望它是纯文本(默认),只需点击查找下一个。否则,您可以使用其他选项来定制您的搜索。

*好,你有种可以

另一种方法解决这个问题是假设意味着利用一切你支持的技术来搜索和筛选结果的用户;按“纯文本”匹配分组,和“正则表达式”匹配。这效率较低,但由于用户不主动选择任何选项,因此可以被认为更加用户友好。因此,您首先使用纯文本进行搜索,然后在标题“纯文本匹配”下返回匹配项,然后假设该字符串为正则表达式,然后在标题“正则表达式匹配”下返回这些匹配项。

一次你已经将这些显示给用户,他们可以选择他们实际替换的那一个。

+0

我们来看看Google的搜索规则。如果我想要搜索,你会怎么办?'你不能*' – miqbal

+0

@miqbal - 我相信这更多的是代表Google上的家伙做出的设计决定。大多数执行搜索的人不会知道正则表达式是什么,所以他们从不决定迎合它。没有什么能够阻止你尝试两种类型的搜索,并且显示每个搜索结果对于最终用户的结果 - 然后他们可以选择他们想要的哪一个,但它仍然涉及最终用户的决定。因此,他们要么首先选择替换类型,要么搜索并替换它们的两种方式,并允许它们选择实际预期的结果。 – dash

+0

但是,使用Visual Studio的人员非常了解regexp。 – miqbal

5

您无法读取用户的心意!

如果用户键入...?,则无法知道他们是要匹配文字"...?",还是将它用作正则表达式匹配2-3个字符。

如果我搜索hello?,我可能不希望匹配"hell"但我可能会故意这样做你不知道你是否不问

给他们一个复选框!

+0

冷静下来:)询问用户是我的第一种方式。 – miqbal

相关问题