Ruby 捕获文本中的红宝石/红宝石差异

Ruby 捕获文本中的红宝石/红宝石差异,ruby,regex,rubular,Ruby,Regex,Rubular,我已经仔细地从这个红色窗口剪切并粘贴到我的代码中,但是我得到了不同的结果。我想要的是红细胞匹配捕获。然而 desc_pattern = /^<DD>(.*\n?.*)\n/ if desc =~ desc_pattern puts description = $1 end desc_pattern=/^(.*\n?*)\n/ 如果desc=~desc_模式 puts description=$1 结束 只给我第一行,即 <DD>@mathpunk Grief

我已经仔细地从这个红色窗口剪切并粘贴到我的代码中,但是我得到了不同的结果。我想要的是红细胞匹配捕获。然而

desc_pattern = /^<DD>(.*\n?.*)\n/
if desc =~ desc_pattern
    puts description = $1 
end
desc_pattern=/^(.*\n?*)\n/
如果desc=~desc_模式
puts description=$1
结束
只给我第一行,即

<DD>@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />
@mathpunk Griefing(即,trolling)作为游戏:http://t.co/LwOH1Vb
我不认为这是我的测试数据,但这是可能的。我错过了什么


(Ubuntu 10.10上的ruby 1.9(

我相信您的代码中需要多行修饰符:


/m多行模式:点匹配换行符,^和$都匹配行的开始和结束。

我相信您的代码中需要多行修饰符:


/m多行模式:点匹配换行符、^和$这两个匹配行的开始和结束。

将测试数据粘贴到一个编辑器中,该编辑器能够显示控制字符并验证换行符。通常情况下,在Linux系统上,它应该只与正则表达式中的一样
\n
。(几周前我遇到了不寻常的断线,不知道为什么。)

您可以做的另一项检查是,更改括号并打印捕获组。这样您就可以看到正则表达式的哪个部分与哪个部分匹配

/^<DD>(.*)\n?(.*)\n/

将测试数据粘贴到一个编辑器中,该编辑器能够显示控制字符并验证换行符。通常,在Linux系统上,它应该仅为
\n
,就像在正则表达式中一样。(几周前,我遇到了不寻常的换行符,不知道为什么。)

您可以做的另一项检查是,更改括号并打印捕获组。这样您就可以看到正则表达式的哪个部分与哪个部分匹配

/^<DD>(.*)\n?(.*)\n/
以下是:

!/usr/bin/env ruby
desc='@mathpunk Griefing(即trolling)作为游戏:http://t.co/LwOH1Vb
–约翰尼·巴德海尔(8只蜘蛛)http://twitter.com/8spiders/status/92876473853157377 拉拉,这不应该匹配哦,太好了 描述模式=/^(.*\n?*)\n/ 如果desc=~desc_模式 puts description=$1 结束
印刷品

@mathpunk Griefing(即,trolling)作为游戏:http://t.co/LwOH1Vb
–约翰尼·巴德海尔(8只蜘蛛)http://twitter.com/8spiders/status/92876473853157377
在我的系统上(Linux,Ruby 1.8.7)

也许您的换行符真的是
\r\n
(Windows样式)?如果您尝试:

desc_pattern = /^<DD>(.*\r?\n?.*)\r?\n/
desc_pattern=/^(.*r?\n?*)\r?\n/
以下内容:

!/usr/bin/env ruby
desc='@mathpunk Griefing(即trolling)作为游戏:http://t.co/LwOH1Vb
–约翰尼·巴德海尔(8只蜘蛛)http://twitter.com/8spiders/status/92876473853157377 拉拉,这不应该匹配哦,太好了 描述模式=/^(.*\n?*)\n/ 如果desc=~desc_模式 puts description=$1 结束
印刷品

@mathpunk Griefing(即,trolling)作为游戏:http://t.co/LwOH1Vb
–约翰尼·巴德海尔(8只蜘蛛)http://twitter.com/8spiders/status/92876473853157377
在我的系统上(Linux,Ruby 1.8.7)

也许您的换行符真的是
\r\n
(Windows样式)?如果您尝试:

desc_pattern = /^<DD>(.*\r?\n?.*)\r?\n/
desc_pattern=/^(.*r?\n?*)\r?\n/

它对我有效,没有任何改变。它对我有效,没有任何改变。我发现添加m不会改变Rubular中的任何内容,也不会改变我的代码中的任何内容。如果它对@Ken Bloom有效,那么问题可能出在别处……多行模式不是解决方案;如果有任何改变,它会使问题变得更糟。它改变了matchi中正则表达式的含义直到第一个或第二个换行符,直到匹配到最后一个换行符。此外,Ruby的多行模式对锚点没有影响;
^
$
始终匹配行边界。我发现添加m不会改变Rubular中的任何内容,也不会改变我的代码中的任何内容。如果它对@Ken Bloom有效,那么问题可能在别处……多行模式e不是解决方案;如果有的话,它会使问题变得更糟。它将正则表达式的含义从匹配第一行或第二行改为匹配最后一行。此外,Ruby的多行模式对锚没有影响;
^
$
始终匹配行边界。是的,就是这样。我尝试了Rubulard直到我像你一样添加了
\r?
它才起作用。是的,就是这样。我试过Rubular,直到我像你一样添加了
\r?
它才起作用。