Php 正则表达式:在数学括号之间选择:模板引擎

Php 正则表达式:在数学括号之间选择:模板引擎,php,regex,brackets,Php,Regex,Brackets,今天我正在使用PHP创建一种小型语言(只是为了好玩),但我遇到了一个问题: 如何在匹配的括号之间进行选择? 我的模板字符串: for(items as item){ // this bracket if(some_condition){ // do stuff } // my regex stops here } // and this bracket 我使用了[\w]+\([\w]+\){([\s\n\r\t/\w(){}]+?)},但它在找到第一个闭合括号时停止

今天我正在使用PHP创建一种小型语言(只是为了好玩),但我遇到了一个问题:

如何在匹配的括号之间进行选择?

我的模板字符串:

for(items as item){ // this bracket
  if(some_condition){
      // do stuff

  } // my regex stops here


} // and this bracket
我使用了
[\w]+\([\w]+\){([\s\n\r\t/\w(){}]+?)}
,但它在找到第一个闭合括号时停止

如何让它在匹配的括号中选择所有内容?:

对于(作为项目的项目){//此括号

if(some_condition){
      // do stuff

  } // my regex stops here
}//这个括号呢

if(some_condition){
      // do stuff

  } // my regex stops here
然后我将分别为编译
中的内容


附言:请不要发表诸如“不要麻烦做这件事”或“不要重新发明轮子”之类的评论。这只是为了学习。

您可以尝试下面的正则表达式,它允许匹配另一个
}
括号

[\w]+\([ \w]+\){([\s\n\r\t\/\w(){}]+?}[\s\n\r\t\/\w(){}]+?)}
您可以使用:

这张照片

if(some_condition) {
    while stuff {
        hi
    }
}
done
也就是说,已正确检测到内部块

也就是说,正则表达式在解析形式语言时是一个错误的工具(尽管它们在标记化方面很好)。例如,一旦添加一个包含“{”的字符串文字,上述内容将毫无希望地中断:


您实际需要的是一个解析器,可以是手工编制的(很好的学习练习!),也可以是生成的(请参阅以获取选项).

我想让匹配括号中的所有内容都匹配。括号内的代码无关紧要;天哪..停止编辑代码。
被放出来了,这样你就可以看到如果括号中有更多的指令,我想选择什么。我不能对每个指令都这样做。@boyd这个怎么样?它适用于所有情况。.我花了1小时我们的目标是理解前瞻性的东西,是的,它是如何工作的,我在我的问题中如何描述它。干得好。当我在末尾有一些其他代码时,比如
打印变量;退出程序;
?。如果我在末尾添加一个额外的空间,它就不起作用了。因为行尾
$
锚。在演示站点a上发布您的输入nd在这里提供保存的链接。我将尝试解决您的问题…或进入聊天室。我如何选择“FORs”并在之后保留代码?我认为您是对的。echo是一个不使用正则表达式的很好的示例。我将构建自己的解析器(我不喜欢使用从internet生成的东西。我喜欢构建自己的东西).非常感谢您的示例和IDE。
for(items as item){
    echo "hi there :{ ";
}