有没有一种简单的方法可以在 FreePascal/Lazarus 中进行 RegExp 替换?
四处寻找,我发现我可以相当容易地进行匹配,但我正在努力寻找进行搜索和替换的函数。
我想要实现的目标如下。
- 我有一个 XML 文件加载到 SynEdit 组件中。
- XML 文件在开头有一个声明
- DTD 保存在单独的文件中。
- 我不想将两者合并到一个文件中,但我确实想在编辑 XML 时对其进行验证。
- 我正在将 XML 读入字符串变量,并且希望将 DTD 插入到临时字符串变量中的 XML 内容之间(以创建具有自包含 DTD 的兼容 XML),该变量可以进行解析和验证。
所以基本上我有:
<?Line1?>
Line2
Line3
我想进行正则表达式类型搜索,并将 '' 替换为 '\and
<?Line1?>
<![DTD
INFO WOULD
GO HERE
!]
Line2
Line3
例如在 PHP 中我会使用:
preg_replace('/(<\?.*\?>)/im','$1
<![DTD
INFO WOULD
GO HERE
!]',$sourcestring);
但 FreePascal / Lazarus 似乎没有一组等效的正则表达式函数 - 只是一个简单/基本的正则表达式匹配函数。
或者是否有一种不使用正则表达式的更简单的方法 - 我不想假设声明始终位于第 1 行的正确位置 - 只是让事情变得复杂。
Thanks,
FM
据我所知,PerlRegEx 单元与 Free Pascal 不兼容。但您可以使用 Free Pascal 附带的 RegExpr 单元。
如果我理解正确的话,你想要替换。这是一个简单的示例,您可以根据自己的需要进行调整。
{$APPTYPE CONSOLE}
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
uses
regexpr;
var
s: string;
begin
s := 'My name is Bond.';
s := ReplaceRegExpr(
'My name is (\w+?)\.',
s,
'His name is $1.',
TRUE // Use substitution
);
WriteLn(s); // His name is Bond.
ReadLn;
end.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)