Я изменяю PHP Markdown (PHP-парсер языка разметки, который используется здесь при переполнении стека), пытаясь реализовать пункты 1, 2 и 3, описанные Джеффом в этого сообщения . Я легко сделал последние два, но этот оказывается очень трудным:
- Удалена поддержка внутрисловного слова.
выделение как_данный_экземпляр
Фактически, в «нормальной» реализации уценки like_this_example будет отображаться как этот пример. Это очень нежелательно; Я хочу, чтобы только _example_ стал примером .
Я посмотрел в исходном коде и нашел регулярное выражение, используемое для выделения:
var $em_relist = array(
'' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![.,:;]\s)',
'*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
'_' => '(?<=\S|^)(?<!_)_(?!_)',
);
var $strong_relist = array(
'' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![.,:;]\s)',
'**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
'__' => '(?<=\S|^)(?<!_)__(?!_)',
);
var $em_strong_relist = array(
'' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![.,:;]\s)',
'***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
'___' => '(?<=\S|^)(?<!_)___(?!_)',
);
Я пытался открыть его в Regex Buddy , но этого оказалось недостаточно, и, потратив на это полчаса работы, я все еще не знаю, с чего начать. Есть предложения?
Некоторые люди, когда сталкиваются с
проблема, подумай "Я знаю, я буду использовать
регулярные выражения. "Теперь у них есть
две проблемы.