Может ли одна группа захвата регулярных выражений захватить фразу без некоторых ее средних символов? - PullRequest
4 голосов
/ 29 апреля 2011

Я работаю над XML, в котором перечислены регулярные выражения, которые должны использоваться в качестве групп захвата. Почему это сделано таким образом, это длинная история, и я ничего не могу изменить.

Я только что натолкнулся на ситуацию, когда хочу запечатлеть имя, которое занимает две строки, то есть Bob\nJones. Есть ли способ для меня, чтобы записать все это имя в одну группу захвата без использования каких-либо других групп захвата в Perl с использованием регулярных выражений? По сути, я хочу получить $1 = "Bob Jones", заменив \n пробелом.

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

Ответы [ 2 ]

6 голосов
/ 29 апреля 2011

номер

1 голос
/ 29 апреля 2011

Возможно, вам стоит взглянуть на некоторые модули синтаксического анализатора XML. XML :: Simple довольно ... ну ... просто и может лучше, чем вы можете анализировать XML-файл, используя регулярные выражения. Как вы обнаружили, рано или поздно вы попадете в точку, когда регулярные выражения начинают становиться довольно запутанными, когда вы пытаетесь анализировать каждую возможную комбинацию.

Хотелось бы, чтобы стандартная установка Perl шла с модулями XML, HTML и LWP. Значительному количеству моих Perl-скриптов всегда требуется доступ к HTML или синтаксический анализ XML-файлов, и иногда невозможно загрузить и скомпилировать нужные вам модули из CPAN . Я считаю, что для работы XML :: Simple необходимо несколько других XML-модулей (на ум приходит XML :: SAX ), но компиляции кода на С нет.

Это означает, что вы можете поместить модуль XML :: Simple в каталог со своим скриптом Perl. Массив @INC по умолчанию содержит текущий каталог. (Или вы можете использовать use lib pragma).

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