加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby递归正则表达式

发布时间:2020-12-16 23:24:54 所属栏目:百科 来源:网络整理
导读:那为什么这不起作用?我正在创建一个匹配公式的正则表达式(这是更大的标准描述的一部分).但是我被困在这里,因为它似乎不想匹配公式中的嵌入式公式. stat = /(Stat3|Stat2|Stat1)/number_sym = /[0-9]*/formula_sym = /((target's )?#{stat}|#{number_sym}|N#
那为什么这不起作用?我正在创建一个匹配公式的正则表达式(这是更大的标准描述的一部分).但是我被困在这里,因为它似乎不想匹配公式中的嵌入式公式.
stat        = /(Stat3|Stat2|Stat1)/

number_sym  = /[0-9]*/
formula_sym = /((target's )?#{stat}|#{number_sym}|N#{number_sym})%?/
math_sym    = /(+|-|*|/|%)/

formula     = /^((#{formula}|#{formula_sym})( #{math_sym} (#{formula}|#{formula_sym}))?)$/

p "(target's Stat2 * N1%)".match(formula).to_s #matches
p "((target's Stat2 * N1%) + 3)".match(formula).to_s #no match
p "(Stat1 + ((target's Stat2 * N1%) + 3))".match(formula).to_s #no match

解决方法

当您使用#{}语法时,Ruby使用to_s将Regexp对象转换为字符串.看看将Regexp对象转换为字符串时会发生什么:
irb> re = /blah/
  => /blah/
irb> re.to_s
  => "(?-mix:blah)"
irb> "my regex: #{re}"
  => "my regex: (?-mix:blah)"
irb> /my regex: #{re}/
  => /my regex: (?-mix:blah)/

要获取所需的字符串(在我的示例中,“blah”),请使用Regexp#source方法:

irb> re.source
"blah"

所以要使用你的例子:

formula_sym = /((target's )?#{stat.source}|#{number_sym.source}|N#{number_sym.source})%?/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读