2016-09-26 109 views
0

美好的一天!我试图创建一个程序来接受来自用户的Lambda表达式,该程序做的是检查它是否为有效的Lambda表达式。使用preg_match验证表达式

例子 - 用户输入(λa.abc)一 - >然后验证

我的问题是,我的正则表达式函数的知识是非常有限的,我一直在使用的preg_match来解决这一点,但仍然没有太大的进展。任何帮助将不胜感激..谢谢:)

那么这些都是有效的λ-表达

  1. 单个可变=(单字母)
  2. 功能应用=(λ的规则-expression)(λ-表达)
  3. 功能抽象=λ(变量)。(λ表达)

这是我做了的preg_match

if(preg_match("/\((L([a-z])*.(([a-z])*)*)\)/", $getexpression, $match)): 
print "Valid!"; 

并没有真正的工作,以及

+0

请发布更多这些表达式的例子,以及它们是如何有效/无效的。以及您迄今为止自己制作的代码。 – ChristianF

+0

真的很抱歉格式化我有点新在这里 – Gorodetski

+0

请编辑您的问题,以更可读的方式包含所有的信息。 – ChristianF

回答

1

我必须承认,我没有从你的表达式的定义得到太多,因为你基本上是说“的代码表达式是一个变量或一组变量“。
我通常会建议避免在定义本身中使用你正试图定义的词。

这就是说,从维基百科和评论读了,我想我可能已经得到了什么可以被解释为一个工作正则表达式是:

// Basic definition: Lambda + letter == variable. 
$lVar = 'λ[a-z]'; 

// Complex definition: Variable, possibly followed by variables, 
// and closed with a letter preceeded by a dot or whitespace. 
$lExp = "({$lVar}(?:\\.{$lVar})*(?:[ .][a-z]+))"; 

// Complete definition: 
// 1. Only single expression. 
// 2. Or a parameterized expression which may contain 
//  the entire pattern recursively. 
$lRegEx = "/^$lExp|\\($lExp(?R)\\)\\Z/u"; 

话虽这么说,我不是100%确定这可以用正则表达式进行测试。至少不完全。这似乎是你需要编写/使用tokenizer的东西。