使用preg_match

时间:2016-09-26 10:58:09

标签: php regex preg-match lambda-calculus

美好的一天!我正在尝试创建一个程序,接受用户的Lambda表达式,该程序的作用是检查它是否是有效的Lambda表达式。

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

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

这些是有效的λ表达式的规则

  
      
  1. 单个变量=(单个字母)
  2.   
  3. function application =(λ-expression)(λ-expression)
  4.   
  5. function abstraction =λ(variable)。(λ-expression)
  6.   

这是我用preg_match

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

效果不好

1 个答案:

答案 0 :(得分: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 for。

的东西