占位符在文本文档中

时间:2018-04-25 19:09:41

标签: regex delphi

我正在寻找一个与文本文档中的$ P {xxx}占位符匹配的正则表达式,其中xxx是一个类似于JS语法的表达式,用于读取json数据。例子:

$P{DATA}
$P{DATA.Customers}
$P{DATA.Customers[2].Name}

表达式应该与占位符完全匹配,并且能够将括号内的点分隔的项目分组。

提前致谢。

编辑:添加Delphi标记。

3 个答案:

答案 0 :(得分:1)

这将在群组^\$P\{(.*)\}$

内匹配

如何按点分组,请在此处查看此答案:How do the regular expression capture infinite groups?

答案 1 :(得分:1)

试试Regex:

^\$P\{(?:([^}\.]+)(?:\.([^}\.]+))*)\}$

Demo

答案 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我猜它会比正则表达式快得多。