我试图找到最好的方法来查找和替换(在 Ruby 1.9.2 中)以零或偶数个反斜杠开头的特殊代码 (%x) 的所有实例。
换句话说, :
%x --> FOO
\%x --> \%x
\\%x --> \\FOO
\\\%x --> \\\%x
\\\\%x --> \\\\FOO
etc.
一个字符串中可能有多个实例:“这是我的 %x 字符串,带有两个 %x 代码。”
在此处和此处提出的问题的帮助下,我得到了以下代码来做我想做的事情:
str.gsub(/
(?<!\\) # Not preceded by a single backslash
((?:\\\\)*) # Eat up any sets of double backslashes - match group 1
(%x) # Match the code itself - match group 2
/x,
# Keep the double backslashes (match group 1) then put in the sub
"\\1foo")
不过,那个正则表达式似乎有点重量级。由于此代码将在我的应用程序中以合理的频率调用,因此我想确保我不会错过更好(更清洁/更有效)的方法来执行此操作。