Ваш код:
$content = preg_replace('#\<\/head\>*(:alphanum:)#', '</html>', $content);
Причина, по которой это не работает, заключается в том, что :alphanum:
не является допустимым синтаксисом в регулярных выражениях в стиле PREG.Подобные классы символов были разрешены в функциях регулярных выражений PHP в стиле ereg, но эти функции устарели, поэтому вам следует придерживаться PREG.
Решение состоит в том, чтобы заменить :alphanum:
на правильный синтаксис PREG.
В случае :alphanum:
правильный синтаксис: [0-9a-zA-Z]
.
Существуют также сокращения, такие как \d
для любого числового символа, который можно использовать вместо 0-9
.См. http://www.regular -expressions.info / reference.html для получения дополнительной информации об этом.
[EDIT]
Итак, теперь у вас есть:
$content = preg_replace('#\<\/head\>*([0-9a-zA-Z])#', '</html>', $content);
Как вы говорите, это все еще не работает, но, по крайней мере, решается очевидная проблема.
Первый вопрос: у вас есть "" в регулярном выражении, но вы, кажется, спрашиваетезаменить все после "" - это "" опечатка?
Второй пункт: регулярное выражение [0-9a-zA-Z]
будет соответствовать только одному символу.Чтобы сопоставить несколько символов, вам нужно добавить либо +
, либо *
после [0-9a-zA-Z]
.Знак «плюс» означает, что вы хотите сопоставить один или несколько из [0-9a-zA-Z]
, тогда как звездочка означает ноль или более вхождений.
Третий пункт: код, указанный в вопросе, содержит больше, чем просто буквенно-цифровые символы,Это HTML, поэтому он включает в себя угловые скобки, # -символы, даже символ авторского права.Очевидно, что [0-9a-zA-Z]
не будет соответствовать ни одному из них (равно как и :alphanum:
с использованием синтаксиса ereg).
Вы можете добавить все символы, которые могут появиться в коде, к вашему регулярному выражению, чтобы сделать что-то вроде [0-9a-zA-Z<>#]
но это, вероятно, не практично.Лучшей идеей будет сопоставление любых символов, а не поиск буквенно-цифровых символов.Чтобы сопоставить любой символ, вы должны использовать точку (.
), поэтому ваше регулярное выражение будет выглядеть примерно так:
$content = preg_replace('#</html>.+#', '</html>', $content);
Надеюсь, это поможет.