如何检查字符串是“字符串”还是RegEx?

时间:2009-10-06 11:53:33

标签: c# .net regex

如何检查文本框中的字符串是否是RegEx的普通字符串?

我正在逐行搜索文本文件。

.Contains(Textbox.Text);Regex(Textbox.Text) Match(currentLine)

(我知道,语法不是这样的,它只是用于演示)

现在我的程序应该自动检测,如果Textbox.Text是RegEx的形式,或者它是普通的字符串。

有什么建议吗?写我自己的小RexEx来检测Textbox是否包含RegEx?

编辑:

  

我没有添加我的字符​​串   可以像Foo ore 0005一样非常简单   我正在尝试建议的解决方案   马上!

4 个答案:

答案 0 :(得分:5)

您无法使用正则表达式检测正则表达式,因为正则表达式本身不是常规语言

然而,你可能做的最简单的事情就是尝试从你的文本框内容编译一个正则表达式,当它成功时,你知道它是一个正则表达式。如果它失败了,你知道它不是。

但这会将普通字符串如“foo”分类为正则表达式。根据您的需要,这可能是也可能不是问题。如果它是搜索字符串,则结果对于这种情况是相同的。在“foo.bar”的情况下,它们会有所不同,但因为它是一个有效的正则表达式但匹配不同于字符串本身的东西。

我的建议,也在另一条评论中说明,您只需始终启用正则表达式搜索,因为如果您在此处拆分代码路径,则完全没有区别。除了可疑的绩效福利(如果有很多好处,这不太可能产生任何影响)。

答案 1 :(得分:3)

许多字符串可能是正则表达式,每个正则表达式实际上都可以是字符串。

考虑字符串“thin”。可以是字符串('。'是点)或正则表达式('。'是任何字符)。

我只需添加一个复选框,用户可以像往常一样在许多应用程序中指示他是否输入正则表达式。

答案 2 :(得分:2)

根据您对字符串正则表达式的定义,一种可能的解决方案是检查字符串是否包含任何正则表达式的典型字符。

你可以这样做:

string s = "I'm not a Regex";

if (s == Regex.Escape(s))
{
   // no regex indeed
}

答案 3 :(得分:0)

尝试在正则表达式中使用它并查看是否抛出异常。

这种方法只检查它是否是一个有效的正则表达式,而不是它是否是一个。

另一种方法可能是检查它是否被斜线包围(即'/ foo /')带有斜杠的周围正则表达式是常见的做法(尽管你必须在将斜杠输入正则表达式库之前删除斜杠)

相关问题