Мне нужно сделать электронную книгу, содержащую фрагменты кода. Я использую GREP для выбора всех тегов кода (ограниченных <> — треугольными скобками) и применяю к ним собственный стиль.
RegEx, который я разработал: http://regexr.com/39puq
Отлично работает онлайн.
Однако это не работает в InDesign. Я приложил изображение (посмотрите разницу между ним и ссылкой выше.
Второй абзац содержит набор отступов, которые InDesign просто пропускает.
Есть идеи, почему? Я что-то пропустил?
Спасибо.
Позднее редактирование:
Следуя другому потоку StackExchange , я нашел этот фрагмент: <.*>
Однако он имеет тот же нежелательный эффект. Помощь.
Не пытайтесь сопоставить общий XML с регулярным выражением. Во многих случаях это не сработает, вместо этого используйте синтаксический анализатор XML и экспортируйте результат. Видеть:
В любом случае стиль grep не допускает совпадений за пределами абзаца, потому что это не парсер с несколькими абзацами. Вы можете жестко обойти эту проблему, заменив все концы абзацев принудительными разрывами строк. Это заставляет в дизайне рассматривать его как одну строку и лучше совмещать. Теперь ваше регулярное выражение будет работать.
Тогда ваше регулярное выражение можно упростить как:
<\/?(.|\n)*?>
Поскольку сопоставление (.|/s|/S)
несколько избыточно, так как большая часть /s и /S включена в . хотя \n НЕ так просто добавить, что одно исключение упрощает тестирование. Механизмы регулярных выражений в целом отличаются тем, как они обрабатывают многострочные вещи, поэтому будьте осторожны, проблемы заключаются именно в этом.
ПРЕДУПРЕЖДЕНИЕ: Это регулярное выражение не будет действительно надежным, поскольку оно понимает вложенные файлы <>
. Так что закомментированный код может сильно испортиться. Используйте синтаксический анализатор, чтобы сбросить материал в формате RTF, гораздо лучший подход.
Ваша проблема в том, что многострочный элемент не является одним абзацем в отношении InDesign. Это 5 абзацев.
Замените возврат абзаца принудительным разрывом строки (Shift-Enter), и он будет работать как положено.