Something like this?
(defun c:test ( / *error* RegEx ss ) (vl-load-com)
;; © Lee Mac 2010
(defun *error* ( msg )
(LM:ReleaseObject RegEx)
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ)
)
(if (ssget "_X" '((0 . "INSERT") (66 . 1)))
(progn
(setq RegEx (vlax-create-object "VBScript.RegExp"))
(mapcar '(lambda ( x ) (vlax-put-property RegEx (car x) (cdr x)))
(list
(cons 'pattern "^30(.*)")
(cons 'global acfalse)
(cons 'ignorecase acfalse)
)
)
(vlax-for obj
(setq ss
(vla-get-ActiveSelectionSet
(vla-get-ActiveDocument (vlax-get-acad-object))
)
)
(mapcar
(function
(lambda ( a / s n )
(if (not (eq (setq s (vla-get-TextString a))
(setq n (vlax-invoke RegEx 'replace s "GF$1"))))
(vla-put-TextString a n)
)
)
)
(vlax-invoke obj 'GetAttributes)
)
)
(vla-delete ss)
(LM:ReleaseObject RegEx)
)
)
(princ)
)
;;------------------=={ Release Object }==--------------------;;
;; ;;
;; Releases a VLA Object from memory via plentiful error ;;
;; trapping ;;
;;------------------------------------------------------------;;
;; Author: Lee Mac, Copyright © 2010 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
;; Arguments: ;;
;; obj - VLA Object to be released from memory ;;
;;------------------------------------------------------------;;
;; Returns: T if Object Released, else nil ;;
;;------------------------------------------------------------;;
(defun LM:ReleaseObject ( obj ) (vl-load-com)
;; © Lee Mac 2010
(and obj (eq 'VLA-OBJECT (type obj)) (not (vlax-object-released-p obj))
(not
(vl-catch-all-error-p
(vl-catch-all-apply
(function vlax-release-object) (list obj)
)
)
)
)
)
EDIT: Had it the wrong way round ...