mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-19 23:41:31 +01:00
35 lines
831 B
Text
35 lines
831 B
Text
# 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}
|