新手问题 正则分组匹配时,使用’\n ‘与 $n 为什么不同?

rubysir · 2016年04月11日 · 最后由 mizuhashi 回复于 2016年04月11日 · 1696 次阅读

例如:要将第一分组大写:

str = '1abc2aabbcc3aaabbbccc4'
pp str.sub(/(a{2})(b{2})/, '\1.upcase\2')  # =>"1abc2aa.upcasebbcc3aaabbbccc4" 第一分组怎么没有变大写呢?
pp str.sub(/(a{2})(b{2})/, '\1'.upcase + '\2')  # =>"1abc2aabbcc3aaabbbccc4" 奇怪,upcase()还是没起作用!?
pp str.sub(/(a{2})(b{2})/, $1.upcase + '\2') # =>"1abc2AAbbcc3aaabbbccc4" 使用$1而不是'\1',upcase()才起作用?

$1是你匹配到的量,\1是什么鬼?我也不知道。。

\n 是反向引用,只在匹配的过程中可以使用,所以只能在匹配表达式和 Perl/Sed/Vim 的替换表达式中使用。

例如(Perl 代码):

# 匹配表达式
$var =~ /(\w*)-\1/

# 替换表达式
s/"([^"]*)"/'\1'/g

¥n 和\n是一个东西(

需要 登录 后方可回复, 如果你还没有账号请 注册新账号