您好我是regex的新手,我正在尝试编译正则表达式以匹配下面的文本块,文件中有多个这样的文本块,我想将这些块移动到另一个文件。请帮助我!
conversion DC_PRESS_1024 {
kind = conversionKind rationalFunction;
physMin = 0;
physMax = 10;
coefficients = (
0;
1024;
0;
0;
0;
1;
)
comments =
commentVal {
value =
mlString {
value = "[VIT_DDS]External_CompuMethod";
language = language en;
}
kind = commentKind internal;
}
}
注意:转换XX_XXXX_XXX {}内的内容会有所不同。我想搜索整个块而不管名称如XX_XXXX_XXX和{}内的内容。
答案 0 :(得分:0)
这里的难点在于管理大括号的开始和结束。如果你有可能无限的嵌套括号深度,那么我认为你不能用正则表达式来做,因为它将是一个递归模式。在这种情况下,您需要一个解析器,跟踪打开的括号并通过令牌读取文本标记。
但如果您已经知道在块内部嵌套是不可能的(例如在您的示例中),那么您可以使用像这样的正则表达式:
conversion\s*\w+\s*\{([\s\w\;\=\(\)\[\]\"]|(\{([\s\w\;\=\(\)\[\]\"]|(\{[\s\w\;\=\(\)\[\]\"]+\}))+\}))+\}