regexp“match”突然返回nil,即使表达式有效吗?

时间:2014-04-11 20:01:48

标签: ruby-on-rails ruby

我会感谢有关此问题的任何意见。

我有一个正则表达式,应该从字符串中收集一些数据。 表达式如下所示:

/\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/

我使用的字符串可能如下:

[QUOTE=c|223]ContentText[/QUOTE]

我使用了这段代码:

regexp = /\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/
data = regexp.match(str)

其中str是要获取的字符串:

1: c , 2: 223, 3: ContentText

match仅返回nil。如果我通过rubular.com使用相同的字符串运行相同的正则表达式,我会得到我想要的结果。我也尝试过调用match的各种方式,但它没有帮助。

我误解了match功能吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

你能粘贴确切的代码吗?您的代码段未显示str的分配。您的代码适合我:

irb(main):002:0> regexp = /\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/
=> /\[QUOTE\=(p|c)\|(\d+)\](.*)\[\/QUOTE\]/ 
irb(main):003:0> str = "[QUOTE=c|223]ContentText[/QUOTE]"
=> "[QUOTE=c|223]ContentText[/QUOTE]"
irb(main):004:0> data = regexp.match(str)
=> #<MatchData "[QUOTE=c|223]ContentText[/QUOTE]" 1:"c" 2:"223" 3:"ContentText">
irb(main):005:0>