mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
43 lines
1 KiB
Text
43 lines
1 KiB
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=
|
|
# 6 indicates if we made a change
|
|
6=
|
|
local MATCH MBEGIN MEND
|
|
local -a match mbegin mend
|
|
|
|
while [[ -n $4 ]]; do
|
|
if [[ $4 =~ $2 ]]; then
|
|
# append initial part and subsituted match
|
|
5+=${4[1,MBEGIN-1]}${(e)3}
|
|
# truncate remaining string
|
|
4=${4[MEND+1,-1]}
|
|
# indicate we did something
|
|
6=1
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
5+=$4
|
|
|
|
eval ${1}=${(q)5}
|
|
# status 0 if we did something, else 1.
|
|
[[ -n $6 ]]
|