| Allegro CL version 8.2 Significant update since 8.2 release. 8.1 version |
Arguments: string regexp substitution &key count (start 0) end case-fold single-line multiple-lines ignore-whitespace
A patch, released in July, 2013, fixed a bug in replace-re having to do with BOS (Beginning of String) and EOS markers. The pre-patch behavior was:
cl-user(133): (replace-re "abc abc bc" "^abc\\s+" "_") "__bc"
Note both occurances of 'abc' were replaced by '_'. That is incorrect. The ^ in the regexp argument indicates that 'abc' should be replaced if it is at the beginning of the string (or at the beginning of a line within the string if the multiple-lines argument is true). After applying the patch, the behavior is corrected to:
cl-user(151): (replace-re "abc abc bc" "^abc\\s+" "_") "_abc bc" ;; Similarly for EOS: ;; Before patch: cl-user(101): (replace-re "abc def " "def$" "_" :end 7) "abc _ " ;; After Patch cl-user(162): (replace-re "abc def " "def$" "_" :end 7) "abc def "
This function replaces substrings in string that matches regexp with substitution, returning the new string. It always returns a new string, even if no substitutions are made.
regexp can be a string that specifies a regular expression, or an already-compiled (by compile-re) regular expression. regexp should match a non-zero length string, or an error is signaled.
substitution can be a string, or a function that takes one argument, a list of match substrings returned by the regexp matcher. The function must return a string, which is then used as a substitution string.
The keyword argument count limits the maximum
number of substitutions. If it is nil
, all
occurrences of regexp in
string are replaced.
The keyword arguments start and end limit the region in string where matching occurs.
Other keyword arguments are passed to compile-re to compile regexp.
The symbol naming this operator is also exported from the regexp package.
cl-user(14): (replace-re ":f" "(\\W)(\\w)" "\\1 \\2") ": f" cl-user(15): (replace-re "00a1b23c99" "\\d+" "#") "#a#b#c#" cl-user(16): (replace-re "12345" "\\d(\\d+)(\\d)" "#\\1.\\2") "#234.5" cl-user(17): (replace-re "12345" "\\d(?<middle>\\d+)(?<tail>\\d)" "#\\k<middle>.\\k<tail>") "#234.5" cl-user(18): (replace-re "a12345b67890c" "\\d(?<middle>\\d+)(?<tail>\\d)" "#\\k<middle>.\\k<tail>") "a#234.5b#789.0c" cl-user(19): (replace-re "0123456789" "\\d+" (lambda (matches) (format nil "(~a)" (length (car matches))))) "(10)" cl-user(20): (replace-re "a12345b678c90" "\\d+" (lambda (matches) (format nil "(~a)" (length (car matches))))) "a(5)b(3)c(2)" cl-user(21): (replace-re "a12345b678c90" "([a-z])(\\d+)" (lambda (matches) (format nil "~a(~a)" (string-upcase (cadr matches)) (length (caddr matches))))) "A(5)B(3)C(2)" cl-user(22):
See The new regexp2 module in regexp.htm for further information on this function and the regexp2 module.
Copyright (c) 1998-2016, Franz Inc. Oakland, CA., USA. All rights reserved.
This page has had moderate revisions compared to the 8.1 page.
Created 2016.6.21.
| Allegro CL version 8.2 Significant update since 8.2 release. 8.1 version |