【问题标题】:How to check if an RegEx have the correct syntax?如何检查 RegEx 是否具有正确的语法?
【发布时间】:2013-09-11 07:34:11
【问题描述】:

我想知道RegEx 类中是否存在任何方法来检查表达式是否具有有效的语法。

我不是说如果正则表达式匹配一个字符串或类似的东西,那么“IsMatch”或“Success”方法对我没有帮助。

为了理解我,例如,当使用 RegEx.Match 方法和这个表达式时,它会抛出异常,因为表达式的语法无效:

"\\\" 

(不带双引号)

我检查了正则表达式类方法,但找不到像“tryparser”这样的方法。

然后检查一个表达式是否有有效的语法,我这样做:

Try
    Regex.Match(String.Empty, "\")
    Return True
Catch
    Return False
End Try

我只是想知道我是否可以通过直接从regex 类的方法返回值或将regex 类方法的结果转换为布尔值来简化代码。

更新:

我在执行时创建 RegEx,对我的外部工具没有帮助。

【问题讨论】:

标签: .net regex vb.net


【解决方案1】:

从技术上讲,您可以使用 Regex 的构造函数...

Private Shared Function IsRegexValid(str As String) As Boolean
    Dim result As Boolean
    Try
        Dim rx as Regex = New Regex(str)
        result = True
    Catch ex As ArgumentException
        result = False
    End Try
    Return result
End Function

或构建Regex对象或返回Nothing的方法...

Private Shared Function TryBuildRegex(str As String) As Regex
    Dim result As Regex
    Try
        result = New Regex(str)
    Catch ex As ArgumentException
        result = Nothing
    End Try
    Return result
End Function

然后

Dim isvalid As Boolean = IsRegexValid("\")

或

Dim rx As Regex = TryBuildRegex("\")

If rx IsNot Nothing Then
End If

【讨论】:

  • 谢谢,但你的第一个函数不起作用,尝试使用正则表达式构造函数会引发异常,因为你试图使用 NEW 构造函数作为过程中的第一个关键字......但即使工作你正在存储所有内存中的新正则表达式对象,直到你不处理它们,但我理解你想要做什么,但基本上是一个尝试/捕获然后我会知道我的原始代码是否可以得到更多改进,而不是扩展和分配内存中的对象.再次感谢
  • @ElektroHacker Regex 不是 IDisposable,因此您不会“丢弃”它们。当您不再使用它们时,垃圾收集器会处理它们。但是是的,我创建了一个Regex 来测试是否可以创建Regex :-)
  • 如果您的问题是“是否有Regex.IsExpressionValid(String)?”那么响应是“不”。您必须以某种方式构建正则表达式(就像 Regex.Match 所做的那样,或者像 new Regex 所做的那样)并查看它是否有效。
  • 感谢您的称赞,这是我所知道的,是的,我对正则表达式对象有点困惑,我想说的是我需要以更快的速度执行正则表达式 try/catch 所以GC 在需要的时候不做这项工作。对不起我的英语
【解决方案2】:

除非您是动态创建正则表达式,否则您可以使用Expresso 或The Regulator 之类的工具。

它们都非常好和有用,它们还可以帮助您构建表达或分析现有表达。

【讨论】:

  • 谢谢,但很明显我需要代码如果我要求 C# 和 VB.NET,而不是外部工具,无论如何,谢谢。
  • @ElektroHacker:对不起,那么 xanatos 的答案看起来是正确的选择。
猜你喜欢
  • 2012-01-21
  • 2013-07-23
  • 2012-05-02
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2011-10-11
相关资源
最近更新 更多