Регулярное выражение для сопоставления \ n и пробела - PullRequest
4 голосов
/ 01 декабря 2010

Я пытаюсь использовать регулярное выражение в моем скрипте perl для анализа файла на соответствие:

Пробел и "\ n" (перевод строки) поочередно - сначала я хотел бы, чтобы он соответствовал пробелу, затем "\ n", затем пробел (который находится на новой строке в файле ... и т. д.)

спасибо, -AD

Ответы [ 4 ]

2 голосов
/ 01 декабря 2010

Вы можете сделать:

if($file =~/ |(?: \n)+ ?/) {
        print $file." has the pattern\n";
}

Используемое регулярное выражение |(?: \n)+ ?, которое соответствует:

  • Один пробел или
  • Один или несколько space\nс последующим необязательным space
1 голос
/ 01 декабря 2010

Попробуйте это:

(^ \n)+
0 голосов
/ 02 декабря 2010

Вы сказали, что хотите, чтобы второй пробел в вашем шаблоне был на новой строке.Теперь, сможете ли вы получить это, зависит от того, откуда вы взяли свою строку (ну, может быть, не , где , но я думаю, вы поняли мою точку зрения).Если данные, которые вы анализируете, читаются из файла, то вы должны прочитать файл в режиме абзаца (т.е. каждый абзац вместо каждой строки будет представлять собой запись).

Предполагается, что вы используете дескриптор файла FILE, сделайте это:

{
   local $/ = ""; # one paragraph constitutes one record
   while (<FILE>) {
      if (/ \n /) {
         print "Found one match!\n";
      }
   }
}

Обратите внимание, что шаблон регулярного выражения, который я использовал, не учитывает множественные вхождения space-newline-space, так как я не был уверен, что именно вы пытались сделать.Но в любом случае, моя главная мысль - это использование

local $/ = "";

HTH

0 голосов
/ 01 декабря 2010

Чтобы соответствовать началу строки, используйте курсор ^.

Чтобы соответствовать пробелу, вы можете использовать буквальный пробел, или для любого пробела, используйте \s.

Помещение sgm в конец шаблона, например /pattern/sgm приведет к совпадению между строками.

Дополнительную информацию и примеры можно найти по адресу perldoc perlfaq6 , если вы заинтересованы.

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