регулярное выражение извлекает строку между двумя строками - PullRequest
2 голосов
/ 01 сентября 2010

Я пытаюсь извлечь строки с помощью регулярных выражений.Например:: [Customer].[Yearly Income], [Sales Territory].[Sales Territory], [Customer].[Total Children]

Любая помощь приветствуется. Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 01 сентября 2010

Если у вас есть текст в строке с именем query, вы можете сделать:

query.scan(/DESCENDANTS\((.+),,/).flatten
=> ["[Customer].[Yearly Income]", "[Sales Territory].[Sales Territory]",
"[Customer].[Total Children]"]

Некоторые заметки:

  • \( соответствует буквальной открытой скобке
  • (.+) запоминает символы между открытой скобкой и двумя запятыми как захват
  • Если регулярное выражение содержит захваты (), то scan будет возвращать массив массивов захваченных частей для каждого совпадения. В этом случае для каждого совпадения используется только 1 захват, поэтому flatten можно использовать для возврата одного массива всех совпадений, которые нас интересуют.
1 голос
/ 01 сентября 2010
/DESCENDANTS\(([^,]+),,/

Посмотреть на рубуляр

0 голосов
/ 01 сентября 2010

. +?более безопасен, он работает правильно, если SQL находится в одной строке.

query.scan(/DESCENDANTS\((.+?),,/).flatten
0 голосов
/ 01 сентября 2010

Вот более уродливый вариант, который использует split: разделить на "DESCENDANTS (" и ",," и взять любую другую подстроку:

s.split(/DESCENDANTS\(|,,/).each_with_index.inject([]) {|m,(e,i)| m << e if i.odd?; m}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...