正则表达式没法判断是第几个do或者是第几个loop
你要是打算做编译器的话需要使用堆栈

解决方案 »

  1.   

    需要注意的是:do-loop语句有4种形式:
    do while (i < 10)……loop
    do……loop while (i < 10)
    do until (i < 10)……loop
    do……loop until (i < 10)
    我的算法是:把do后面分三种,空白、while、until,记下名称。然后在loop后面根据名称判断,如果是空白,则要求跟while或until。
    但是就没办法提取之间的内容了。有兴趣的可以看我的笨拙写法:
    do\s+((?<b>\s*\r)|(?<w>while)|(?<u>until))\s*(?(b)\s*|\((\S|\s)+\))\s*\r(?<e>(\S|\s)+)loop((?(b)(\s+while|\s+until)|)|(?(w)\s*|)|(?(u)\s*|))\s*(?(b)\((\S|\s)*\)|)\s*
    结果抽取不出<e>部分。