Rubular / Ruby несоответствие в захваченном тексте - PullRequest
0 голосов
/ 19 июля 2011

Я тщательно вырезал и вставил из этого окна Rubular http://rubular.com/r/YH8Qj2EY9j в свой код, но я получаю другие результаты.Захват Rubular - это то, что я хочу.И все же

desc_pattern = /^<DD>(.*\n?.*)\n/
if desc =~ desc_pattern
    puts description = $1 
end

выводит меня только на первую строку, то есть

<DD>@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />

Я не думаю, что это мои данные испытаний, но это возможно.Чего мне не хватает?

(ruby 1.9 в Ubuntu 10.10 (

Ответы [ 3 ]

1 голос
/ 19 июля 2011

Вставьте свои тестовые данные в редактор, который может отображать управляющие символы и проверять символы перевода строки.Обычно это должно быть только \n в системе Linux, как в вашем регулярном выражении.(У меня были необычные разрывы строк несколько недель назад, и я не знаю почему.)

Еще одна проверка, которую вы можете сделать, это поменять скобки и распечатать группы захвата.чтобы вы могли видеть, какая часть вашего регулярного выражения соответствует чему.

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

Еще одна идея, чтобы заставить это работать, измените .*.Не говорите совпадать с любым символом, говорите совпадать с чем угодно, но \n.

^<DD>([^\n]*\n?[^\n]*)\n
1 голос
/ 19 июля 2011

следующее:

#!/usr/bin/env ruby

desc= '<DD>@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />
– Johnny Badhair (8spiders) http://twitter.com/8spiders/status/92876473853157377
<DT>la la this should not be matched oh good'
desc_pattern = /^<DD>(.*\n?.*)\n/
if desc =~ desc_pattern
    puts description = $1 
end

печать

@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />
– Johnny Badhair (8spiders) http://twitter.com/8spiders/status/92876473853157377

в моей системе (Linux, Ruby 1.8.7).

Возможно, разрывы строк действительно \r\n (стиль Windows)? Что если вы попробуете:

desc_pattern = /^<DD>(.*\r?\n?.*)\r?\n/
1 голос
/ 19 июля 2011

Я полагаю, что вам нужен многострочный модификатор в вашем коде:

/ m Многострочный режим: точка соответствует символу новой строки, ^ и $ - обе строки совпадений начинаются и заканчиваются.

...