2011-11-21 111 views
0

有没有办法查看一个字符串是否可以用几个字符扩展来匹配某些给定的正则表达式?我可以使用Regex类吗?我GOOGLE了一段时间,似乎我应该写我自己的正则表达式解析器...正则表达式部分匹配

像亚历克斯说:如果模式为abc字符串ab将符合我的标准和串defbc止跌”吨。我希望这适用于编译时未知的任何正则表达式。

+7

你能发表一个你想要完成的例子吗? –

+0

你有没有想要实现的例子? –

+0

我认为所要求的是查看需要什么字符来获得比赛。例如。 “abc”是模式,“ab”被提供。所述函数的结果是“c”。但是,该模式必须非常明确,才能做到这一点。 – Alex

回答

1

正则表达式被编译成决策树,允许决定在O(n)时间内输入长度为n的匹配。您的自定义RE解析器可以简单地计数直到失败的决策数量,当与匹配所需的步骤数相比较时,它将指示参数对RE的“亲密度”。假设你使用的是相当简单的RE,并且“扩展”意味着在字符串的末尾添加字符,这在计算上是可行的。

+0

这就是我将首先尝试做的,谢谢 – Natalia

+0

但是,如何访问决策树?我不知道你可以这样做。 – neontapir

+0

如果我们可以从例如C#的Match对象获取这些信息,这将是一个更容易的问题。我假设创建自定义分析器涉及到生成自己的决策树/ DFA。有关更多信息,请参阅http://en.wikipedia.org/wiki/Regular_expression#Implementations_and_running_times。 – paislee

0

我相信你需要编写你自己的Regex解析器。它需要能够采取任意的正则表达式并将其分解为元素。例如,它需要采取/abc/并返回{ /abc/, /ab/, /a/ }并检查输入是否与其中的任何匹配。

虽然对于像/abc/这样的简单表达式来说这可能并不算太坏,但对于更复杂的表达式,如(?<=s)t,它们将变得更加繁重,这些表达式看起来很倒霉。

+0

谢谢你的答案,对于非常简单的正则表达式,这种方法足够好了 – Natalia