function TSDIAppForm.RegExpReplace(): Boolean; // 返回是否匹配
var
  vRegExp: OleVariant;
  mString: WideString; // 分析的字符串
  vr:string;
  str:string;     
begin
  // 创建正值对象
  vRegExp := CreateOleObject('VBScript.RegExp');
  // 样板表达式
  vRegExp.Pattern := '\b(?<month>\d{1,2})-(?<day>\d{1,2})-(?<year>\d{2,4})\b';
  vr := '${day}${month}${year}")';
  str := '02-09-2006';
  // 忽略大小写
  vRegExp.IgnoreCase := true;
  // 全局适用
  vRegExp.Global := true;
  
  vr := vRegExp.Replace(str,vr);
  ShowMessage(vr);
  Result := True;end; 以上这个函数运行出错,各位大虾帮忙,有谢!

解决方案 »

  1.   

    检查了,除了  vr := '${day}${month}${year}';  有错误外,还是不能执行。帮忙了,很急!
      

  2.   

    ole error 800A1399   ,这是正则表达式错误,请各位指正,为什么下面过的 VB 就好用呢?Function MDYToDMY(ByVal input As String) As String
            Dim sp As String = "          "
            Dim Regex As System.Text.RegularExpressions.Regex
            Return Regex.Replace(input, _
            "\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", _
            "${day}-${month}-${year}")
    End Function
      

  3.   

    我试了一下,的确有此问题,可能是D与VB用的Regex版本不的关系(我的系统中有1.0与5.5二个版本),而经测试D版的Regex不支持?<aaa>这种变量定义,但用以下方法可实现你的功能:
    var
      vRegExp: OleVariant;
      mString: WideString; // 分析的字符串
      vr:string;
      str:string;
    begin
      // 创建正值对象
      vRegExp := CreateOleObject('VBScript.RegExp');
      // 样板表达式
      vRegExp.Pattern := '\b(\d{1,2})/(\d{1,2})/(\d{2,4})\b'; //不用变量
      vr := '$1-$2-$3';  //用数字代码
      str := '02-09-2006';
      // 忽略大小写
      vRegExp.IgnoreCase := true;
      // 全局适用
      vRegExp.Global := true;  vr := vRegExp.Replace(str,vr);
      ShowMessage(vr);