From c508c6e368ac7faef55a16d9c85a2fbdd21232fc Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Mon, 18 Jan 2010 12:47:09 +0000 Subject: 27604: substitution using regular expressions --- Functions/Misc/regexp-replace | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Functions/Misc/regexp-replace (limited to 'Functions/Misc/regexp-replace') diff --git a/Functions/Misc/regexp-replace b/Functions/Misc/regexp-replace new file mode 100644 index 000000000..5aaedafba --- /dev/null +++ b/Functions/Misc/regexp-replace @@ -0,0 +1,35 @@ +# Replace all occurrences of a regular expression in a variable. The +# variable is modified directly. Respects the setting of the +# option RE_MATCH_PCRE. +# +# First argument: *name* (not contents) of variable. +# Second argument: regular expression +# Third argument: replacement string. This can contain all forms of +# $ and backtick substitutions; in particular, $MATCH will be replaced +# by the portion of the string matched by the regular expression. + +integer pcre + +[[ -o re_match_pcre ]] && pcre=1 + +emulate -L zsh +(( pcre )) && setopt re_match_pcre + +# $4 is the string to be matched +4=${(P)1} +# $5 is the final string +5= +local MATCH MBEGIN MEND +local -a match mbegin mend + +while [[ -n $4 ]]; do + if [[ $4 =~ $2 ]]; then + 5+=${4[1,MBEGIN-1]}${(e)3} + 4=${4[MEND+1,-1]} + else + break + fi +done +5+=$4 + +eval ${1}=${(q)5} -- cgit 1.4.1