[英]Display characters around regex match
是否可以在正則表達式匹配項附近顯示字符? 我有下面的字符串,我想替換每次出現的"change"
同時在比賽前顯示3-5個字符。
string = "val=change anotherval=change stringhere:change: foo=bar foofoo=barbar"
到目前為止我有什么
while line.match(/change/)
printf "\n\n Substitute the FIRST change below:\n"
printf "#{line}\n"
printf "\n\tSubstitute => "
substitution = gets.chomp
line = line.sub(/change/, "#{substitution}")
end
如果您想獲得Perl風格的骯臟:
before_chars = $`[-3, 3]
這是模式匹配之前的最后三個字符。
您可能會使用gsub!
通過以下方式給出塊:
line = "val=change anotherval=change stringhere:change: foo=bar foofoo=barbar"
# line.gsub!(/(?<where>.{0,3})change/) {
line.gsub!(/(?<where>\S+)change/) {
printf "\n\n Substitute the change around #{Regexp.last_match[:where]} => \n"
substitution = gets.chomp
"#{Regexp.last_match[:where]}#{substitution}"
}
puts line
產量:
Substitute the change around val= =>
111
Substitute the change around anotherval= =>
222
Substitute the change around stringhere: =>
333
val=111 anotherval=222 stringhere:333: foo=bar foofoo=barbar
gsub!
會代替匹配項,而更合適的模式\\S+
而不是被注釋掉.{0,3}
將使您能夠打印出易於理解的提示。
塔德曼的答案使用特殊的預匹配變量( $` )。 Ruby還將捕獲組存儲在一個編號變量中,這可能很神奇,但可能更直觀。 例如:
string = "val=change anotherval=change stringhere:change: foo=bar foofoo=barbar"
string.sub(/(.{3})?change/, "\\1#{substitution}")
$1
# => "al="
但是,無論使用哪種方法,請確保在上一次嘗試的匹配失敗時,顯式檢查匹配變量是否為nil。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.