diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2010-01-18 12:47:09 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2010-01-18 12:47:09 +0000 |
commit | c508c6e368ac7faef55a16d9c85a2fbdd21232fc (patch) | |
tree | c46f72ce11b8485f052698b94485bc95bfae77f3 /Functions/Misc/regexp-replace | |
parent | 8890e6e19ffa0bede585527671987972137009c7 (diff) | |
download | zsh-c508c6e368ac7faef55a16d9c85a2fbdd21232fc.tar.gz zsh-c508c6e368ac7faef55a16d9c85a2fbdd21232fc.tar.xz zsh-c508c6e368ac7faef55a16d9c85a2fbdd21232fc.zip |
27604: substitution using regular expressions
Diffstat (limited to 'Functions/Misc/regexp-replace')
-rw-r--r-- | Functions/Misc/regexp-replace | 35 |
1 files changed, 35 insertions, 0 deletions
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} |