Вам не нужно сопоставлять символ новой строки с этими строками ввода. Я думаю, что ваша проблема связана не столько с регулярным выражением, сколько с тем, как вы обрабатываете ваши данные. Пока строки в одинарных кавычках не содержат символ новой строки, вам не нужно компенсировать это.
Попробуйте этот однострочный, например:
perl -nwE '$,="\n"; say /\'([^']+)\'/g;' quotes.txt
Как видите, я использую глобальную опцию /g
, чтобы получить все совпадения из каждой строки.
Дополнительные пояснения:
-n
: предположим, что while (<>)
цикл вокруг программы (чтобы получить входные данные из файла)
- -E: однострочная программа со всеми включенными дополнительными функциями (т.е.
say
)
$,
: установить OUTPUT_FIELD_SEPARATOR на новую строку, чтобы все совпадения
разделены новой строкой.
Если у вас есть весь текстовый файл в строке, попробуйте это:
my @matches = $string =~ /'([^']+)'/g;