Поиск и замена регулярных выражений в нескольких файлах (большие данные) - PullRequest
1 голос
/ 24 апреля 2011

У меня есть следующий фрагмент кода, который повторяется в нескольких файлах:

<tr>
    <th scope="row"> (some php code) </th>
    <td>
         (more php and html)
    </td>
</tr>

Могут быть некоторые пробелы до / после тегов tr, th или td.

Какой инструмент ирегулярное выражение я должен использовать, чтобы заменить его следующим:

<div class="row">
    $1
    $2
</div>

Спасибо.

Ответы [ 3 ]

4 голосов
/ 24 апреля 2011

В течение времени ∞ th не используйте регулярные выражения для анализа HTML.Используйте анализатор HTML.

В perl это означает использование модуля, такого как Web :: Scraper .

3 голосов
/ 24 апреля 2011

Perl имеет параметр командной строки -0777 , чтобы вы могли читать все это в память.Как только вы это сделаете, вы можете использовать замену, которая использует \s* для пробелов, и она будет пересекать границы новой строки.Если вы используете ., обязательно используйте /s в конце замещения.

Я не могу точно сказать, что вы хотите сопоставить, но общий принцип:

perl -0777 -i.orig -pe 's/foo/bar/gs' file1 file2 file3
1 голос
/ 24 апреля 2011

вы также можете сделать это awk. Сначала установите разделитель записей на </tr>, затем найдите открывающий тег <tr> и строку поиска. Допустим, ваша строка поиска - «больше HTML-кода».

v="my new string"
awk -vRS="</tr>" -v newstring="$v" '/<tr>/ && /more html code/{ $0=newstring}{print $0>FILENAME}' file 

Еще одна альтернатива Perl, похожая на ваш принятый ответ

ruby -0777 -i.orig -pe 's/foo/bar/gs' file1 file2 file3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...