需要注意的是: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>部分。
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>部分。