Регулярное выражение в Ruby - PullRequest
2 голосов
/ 03 июня 2010

Может ли кто-нибудь помочь мне сделать правильное регулярное выражение из набора текста в Ruby. Я много пробовал, но не знаю, как обращаться с заголовками переменной длины.

Строка будет иметь формат <sometext>title:"<actual_title>"<sometext>. Я хочу извлечь фактическое название из этой строки.

Я пытался /title:"."/, но он не находит совпадений, так как ожидает закрывающей кавычки после одной переменной из открывающей кавычки. Я не мог понять, как заставить его проверять переменную длину строки. Любая помощь приветствуется. Спасибо.

Ответы [ 3 ]

3 голосов
/ 03 июня 2010

. соответствует любому отдельному символу. Ввод + после символа будет соответствовать одному или нескольким из этих символов. Таким образом, .+ будет соответствовать одному или нескольким символам любого вида. Кроме того, вы должны поставить вопросительный знак после него, чтобы он соответствовал first заключительной кавычке, с которой он сталкивался. Итак:

/title:"(.+?)"/

Скобки необходимы, если вы хотите извлечь текст заголовка, которому он соответствует.

3 голосов
/ 03 июня 2010
/title:"([^"]*)"/

Скобки создают группу захвата. Внутри первый класс персонажей. ^ означает, что он отрицается, поэтому он соответствует любому символу, который не является ". * означает 0 или более. Вы можете изменить его на один или несколько, используя + вместо *.

0 голосов
/ 17 октября 2017

Мне нравится /title:"(.+?)"/, потому что он использует ленивое сопоставление, чтобы остановить .+, потребляющий весь текст, пока не будет найден последний " в строке.

Не будет работать, если строка переносит строки или содержит экранированные кавычки.

В языках программирования, где вы хотите иметь возможность включить разделитель строк внутри строки, вы обычно предоставляете символ или последовательность «escape».

Если ваш экранирующий символ был \, тогда вы могли бы написать что-то вроде этого ...

/title:"((?:\\"|[^"])+)"/

railroad_diagram

Это железнодорожная схема. Железнодорожные диаграммы показывают вам, в каком порядке разбираются вещи ... представьте, что вы - поезд, начинающийся слева. Вы потребляете title:", затем \", если можете .. если не можете, то вы потребляете not a ". Символ> означает, что этот путь предпочтителен ... поэтому вы попытаетесь выполнить цикл ... если вы не можете использовать «» для завершения.

Я сделал это с https://regexper.com/#%2Ftitle%3A%22((%3F%3A%5C%5C%22%7C%5B%5E%22%5D)%2B)%22%2F

но теперь есть плагин для текстового редактора Atom, который делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...