我正在寻找一个与文本文档中的$ P {xxx}占位符匹配的正则表达式,其中xxx是一个类似于JS语法的表达式,用于读取json数据。例子:
$P{DATA}
$P{DATA.Customers}
$P{DATA.Customers[2].Name}
表达式应该与占位符完全匹配,并且能够将括号内的点分隔的项目分组。
提前致谢。
编辑:添加Delphi标记。
答案 0 :(得分:1)
这将在群组^\$P\{(.*)\}$
如何按点分组,请在此处查看此答案:How do the regular expression capture infinite groups?
答案 1 :(得分:1)
答案 2 :(得分:1)
不需要正则表达式,如果你可以使用alcinoe库(https://github.com/Zeus64/alcinoe)那么你就可以这样做:
MyStr := ALFastTagReplace(MyStr, // SourceString
'$P{', // TagStart
'}', // TagEnd
function(const TagString: AnsiString;TagParams: TALStrings; ExtData: pointer; Var Handled: Boolean): AnsiString;
begin
if TagString = 'DATA.Customers' then ...
else if TagString = 'DATA.Customers[2].Name' then ...
else ...
end); // ReplaceProc
此函数将在每个$P{xxx}
标记上触发,让您甚至有机会在原始字符串中替换。关于perf我猜它会比正则表达式快得多。