php, регулярное выражение для поиска идентичных пар
прошу помощи. У меня есть текст, в котором расставлены мои собственные а-ля тег метки типа [читайте_также]тексттексттекст[/читайте_также], [прочее]тексттексттекст[/прочее] и т.д. Причем допустима вложенность. Возможно ли написать регулярку, которая "выкусывает" такие вот пары, НО с учетом СВОЕГО замыкающего тега, а не ближайшего [/]. Сложность в том, что я не хочу ЯВНО указывать перечень (читайте_также|прочее), а соорудить что то типа "заглянуть вперед, найти ближайший СВОЙ замыкающий "тег", и, расценивая УЖЕ ЭТОТ фрагмент как необходимый результат. - вырезать. Т.е. задача - заглянуть вперед и найти свою ближайшую замыкающую пару. Начал с /\[[а-я_]+\].+?\[\/[а-я_]+\]/uis но пока тупик что то UPD дада, я в курсе про обратные ссылки, но не могу осилить логику синтаксически
UPD Решение: /\[([а-я_]+)\].+?\[\/\\1\]/uis
Ответы (1 шт):
Можно обернуть в группу название вашего тега и текст внутри него, и указать его в завершающем теге через \1
Пример:
$text = "[читайте_также]тексттексттекст[/читайте_также], [прочее]тексттексттекст[/прочее]";
preg_match_all('/\[([а-я_]+)\](.+?)\[\/\1\]/uis', $text, $matches, PREG_SET_ORDER);
var_dump($matches);
Результат:
array(2) {
[0]=>
array(3) {
[0]=>
string(85) "[читайте_также]тексттексттекст[/читайте_также]"
[1]=>
string(25) "читайте_также"
[2]=>
string(30) "тексттексттекст"
}
[1]=>
array(3) {
[0]=>
string(59) "[прочее]тексттексттекст[/прочее]"
[1]=>
string(12) "прочее"
[2]=>
string(30) "тексттексттекст"
}
}