Project1

标题: 再问一个关于正则表达式的问题 [打印本页]

作者: 神思    时间: 2009-10-21 23:09
标题: 再问一个关于正则表达式的问题
比如
fileindex = "Graphics/Pictures/p (0)=>0<=500\000Graphics/Pictures/p (1)=>500<=200\000"
file = "Graphics/Pictures/p (0)"
p fileindex[/#{file}=>(\d*)<=(\d*)\000/] # nil


file = "Graphics/Pictures/$p"
p fileindex[/#{file}=>(\d*)<=(\d*)\000/] # nil
貌似遇到空格或者符号之类的会匹配不成功..
有什么可解决的办法
作者: 紫苏    时间: 2009-10-22 02:50
括号在正则表达式中是用来后向引用的,如果要匹配字符串中的括号则需要用反斜杠转义:
  1. /\(0\)/ =~ "(0)"
复制代码
而如果是把字符串嵌入到正则表达式的话,就需要转义反斜杠本身,这样在嵌入到正则表达式的时候才能保留反斜杠本身,否则还是只有一个括号:
  1. str = "\(0\)"
  2. p /#{str}/       # /(0)/
  3. str = "\\(0\\)"
  4. p /#{str}/       # /\(0\)/
复制代码
所以应该是:
  1. file = "Graphics/Pictures/p \\(0\\)"
  2. p fileindex[/#{file}=>(\d*)<=(\d*)\000/]
复制代码

作者: 神思    时间: 2009-10-22 08:54
受教了。我以为嵌入时会自动转义什么的呢。看来只能从原字符下手了。
=_=之前还想找个字符代替呢。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1