У меня есть следующий шаблон:
\<\?php\s*\/\*\s*magicNoteStart\s*\*\/([\w\W]*)\s*\/\*\s*magicNoteEnd\s*\*\/\s*\?\>
Для сравнения со следующим образцом:
<?php
/* magicNoteStart */
$ancillaries = array(
'Page Information' => array(
'hidden' => true
),
'Metadata' => array(
'hidden' => true
),
'Revision Note' => array(
'hidden' => true
)
);
/* magicNoteEnd */
?>
<html>
<head>
<title>Test HTML</title>
</head>
</html>
Таким образом, цель в том, чтобы иметь возможность использовать регулярное выражение для preg_match()
и preg_replace()
.
При использовании с preg_replace()
он должен удалить всю PHP-часть кода в верхней части примера, поэтому в настоящее время у меня есть:
$contents = preg_replace(self::$magic_note_regex, '', $contents, 1);
preg_match()
используется для извлечения всего между /* magicNoteStart */
и /* magicNoteEnd */
, так что он может быть эффективно eval()
ed. В настоящее время мой код для этого выглядит так:
if(preg_match(self::$magic_note_regex, $contents, $matches)) {
return trim($matches[1]);
}
Это устаревшая система, и я не могу нарушить обратную совместимость. Я не могу гарантировать, сколько будет пустого пространства между чем-либо, поэтому мое чрезмерное использование \s*
в схеме, которую я ввел выше.
Так, каков самый короткий способ написать это регулярное выражение?