对上一个问题的跟进:PHP how to best edit an RTF File
我相信我有一个解决方案,但还需要一些帮助。我发现如果我在模板构建器中使用合并字段,我的PHP代码可以找到/替换这种模式中的字段:" {\ field}"但问题是,我需要找到整个字符串,删除所有RTF标记,并比较留下的文本。但是,第一步是找到完整的标记。这就是我被困的地方。我需要能够找到整个字符串长度,从打开" {"关闭"}",与其他可能的" {}"之间。例如:
{\field{\*\fldinst {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11370280 MERGEFIELD details_awardee_name }}{\fldrslt {\rtlch\fcs1 \af31507 \ltrch\fcs0
\lang1024\langfe1024\noproof\insrsid11370280 \'abdetails_awardee_name\'bb}}}
如您所见,此示例具有多个嵌入式标记集。该字符串也将位于更多标记的页面内。有谁知道获得整个字符串长度的方法?这可以用Regex完成吗?完成后,我可以继续剥离所有标签并进行比较。
由于 杰森
答案 0 :(得分:1)
您可以使用选项PCRE_EXTENDED
(x
)提供的recursive pattern。这是一个例子:
$str = 'test { enclosed { sub }} end';
$p = '~\{ ( (?>[^{}]+) | (?R) )* \}~x';
preg_match_all($p, $str, $m);
var_dump($m);
输出:
array(2) {
[0] =>
array(1) {
[0] =>
string(21) "{ enclosed { sub }}"
}
[1] =>
array(1) {
[0] =>
string(9) "{ sub }"
}
}