Удалите все пробелы, разрывы строк и табуляции из всего, что находится за пределами блока <code> - PullRequest
2 голосов
/ 16 декабря 2010

Хорошо, теперь я запускаю этот сценарий, чтобы удалить все лишние пробелы, разрывы строк и вкладки из моего окончательного HTML-вывода:

$html = preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), $html);

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

Единственная разумная вещь, которую я придумал, это удалить все блоки кода, затем выполнить замену и вернуть блоки кода обратно.

1 Ответ

3 голосов
/ 16 декабря 2010

Я бы не использовал для этого одни только регулярные выражения.Я уверен, что кто-то опубликует полусгоревшее регулярное выражение, которое будет либо 1) не поддерживаемым, либо 2) глючным (или и тем, и другим), но реально вам понадобится lex ваш ввод в токены и выводэто в соответствии с контекстом, который создают эти токены.

У меня есть инструмент, который я использую для создания сущностей HTML из существующего HTML.Например, он превращает I'm в I&#8217;m, если это имеет смысл в контексте, где изменение этой сущности будет иметь смысл (например, не в блоке , не в URL и т. Д.).

Я только что импортировал это из своего старого, пыльного репозитория Subversion в Github, здесь: https://github.com/scoates/lexentity

Вот пример использования лексентности: http://files.seancoates.com/lexentity/ (мы используем его для статейна http://phpadvent.org/)

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

S

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