Идентификатор автотеста H2 в строке php

Я пытаюсь написать фильтр wordpress, который автоматически переносит содержимое и принимает следующее:

<h2>lesson 1 bannanas</h2> 

и заменяет его

 <h2 id="lesson-1-bannanas">lesson 1 bannanas</h2> 

Поэтому я могу связать людей напрямую с разделами страницы или блога. Как мне это сделать, не прибегая к чему-то тяжелому, как DOMDocument?

Related of "Идентификатор автотеста H2 в строке php"

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

 $html = preg_replace_callback("#<(h[1-6])>(.*?)</\\1>#", "retitle", $html); function retitle($match) { list($_unused, $h2, $title) = $match; $id = strtolower(strtr($title, " .", "--")); return "<$h2 id='$id'>$title</$h2>"; } 

Для преобразования идентификатора требуется немного больше работы. И чтобы сделать регулярное выражение более надежным, строчный шаблон соответствия текста (.*?) Может быть записан как ([^<>]*) например.

Другой способ (на самом деле довольно простой, хотя он прибегает к манипуляции с dom) использует jQuery для добавления id, который равен содержимому h2

Вы можете использовать str_replace, чтобы заменить тег открытия h2 на один, содержащий ваш идентификатор

 $tag = '<h2>My content</h2>'; $tag = str_replace('<h2>', '<h2 id = "an id">', $tag); echo $tag;