我对正则表达式比较陌生,我不确定这是否是解决我的问题的方法,但这里有。
我有可能包含以下内容的文本文件:
program A {
int x = 10;
tuple date {
int day;
int month;
int year;
}
}
function B {
int y = 20;
...
}
process C {
more code;
}
我需要提取程序或函数或进程之间的任何文本。所以只有 3 种类型的标题。
所以我决定使用正则表达式来获取大括号之间的任何文本。我开始的方式是通过这个表达式,假设我事先知道标识符列表:
(program|function|process)+ A[\s\S]*(?=function)
这可以完美地捕获程序 A 中的任何文本。但有时程序 A 后面可能没有函数。它后面可以跟进程或其他程序。一旦我在最后一个组中添加 OR,它将无法正常工作。
(program|function|process)+ A[\s\S]*(?=function|process|program)
我看到它的方式是通过3个选项:
- 通过正则表达式,但上述可行吗?
- 跟踪大括号,但如果输入缺少一个怎么办。如果在另一组代码中找到匹配的括号,可能很难抛出错误。
- 使用上下文无关语法,但我将最后保留此选项。
提前致谢!
PS:我用它来帮助 RegExpr:http ://gskinner.com/RegExr/?33i30