У меня есть сценарий Perl, который работает над дамп базы данных в виде простого текстового файла, пытается удалить все экземпляры строки и, возможно, других нечетных символов, когда я вижу строки между кавычками:Perl Regex удалить символы новой строки в строке
INSERT INTO ... VALUES ("... these are the lines I'm interested in.")
Я чавкать в файле:
@file = <FILE>;
и:
foreach my $line (@file) {
$line =~ s/"[^"]*(\R)+[^"]*"//g;
# I want to get rid of newlines in strings
# And other odd characters I might come across
}
Один CLAS характер s я использовал вместо (\ R) был:
([\r\n\t\v\f]+)
и я попытался бы:
$line =~ s/"[^"]+?([\r\n\t\v\f]+)[^"]*"//g;
Я уверен, что я что-то не хватает. Я пытаюсь начать сопоставлять буквенную двойную кавычку, просканировать мимо ничего, кроме двойной кавычки (не жадное, по крайней мере одно совпадение), добираться до символов, от которых я хочу избавиться, и продолжать сканировать не двойную кавычку (любое количество других символы, а не двойные кавычки), пока я не дойду до конечной двойной кавычки.
Так что я хотел заменить ничьей 1 $ выше.
я пробовал на линии регулярных выражений строителей, и
/"[^"]*?([\r\n\t\f\v]+)[^"]*"/
работали с тестом он-лайн, используя короткий абзац с новой строкой и вкладками в нем, хотя он был в режиме PHP PCRE. Я думал, что это сработало бы с Perl.
Возможно, я не избегаю некоторых символов правильно в регулярном выражении для Perl? Или шаблон просто не будет работать так, как я хочу, потому что это неправильно.
Спасибо, любая помощь оценена.
Регулярное выражение в regex101.com:
"[^"]*?([\r\n\f\t\v]+)[^"]*?"
спичек для строк, как это:
«Это
мой \ т тест
строка
Итак. там!"
Я сейчас полностью озадачен. :)
Не '\ r' просто любой LINEBREAK? Кроме того, между кавычками могут быть непоследовательные строки новой строки и т. Д. Другая проблема заключается в кавычках, сбалансированы ли они в пределах полного ввода? Кажется, вы не ставите себе начало с любым литералом. – sln
Да, \ R - это любой разрыв строки, который я считаю. Я видел несколько таких поисков. Я думаю, что могут быть не последовательные символы новой строки и другие символы, которые я хочу заменить ничем, или просто символ пробела. Как я должен закрепить старт? Вы имеете в виду что-то вроде «,» или «,», которое я ожидаю увидеть перед цитируемой строкой и, возможно, «,» или «) после строки с кавычками? Благодарю. –
Вы вырезали файл в массив, а затем чередуете данные по очереди, но ваше регулярное выражение указывает, что вы хотите совместить многострочную строку. Это не сработает. Вероятно, вам понадобится/нужно будет скопировать файл в скаляр. –