Я работаю над пользовательской реализацией bbcodes (в основном шорткодов Wordpress). Для этого мне нужно сопоставить содержимое, которое можно найти между двумя bbcode-подобными тегами.
Например:
[example]The content I want to retrieve[/example]
Проблема состоит в том, что эти теги в основном могут быть любыми. На этот раз это может быть пример, но вполне может быть что-то вроде этого:
[hello_world with="attribute"]And some [more-complex] content[/hello_world]
Единственное, что мне нужно, это более сложный контент из шорткода hello_world. Я нашел регулярное выражение, которое достигает этого, и я немного изменил его, чтобы соответствовать моим потребностям:
(?<=\[.*\])(.*?)(?=\[.*\])
Но при использовании в следующем коде:
<?php
$tag = '[test_tag with="attributes"]Content I [want] To capture[/test_tag]';
// Get the content of the shortcode.
preg_match('~(?<=\[.*\])(.*?)(?=\[.*\])~', $tag, $shortcodeContent);
var_dump($shortcodeContent);
Я получаю следующую ошибку :
Warning: preg_match(): Compilation failed: lookbehind assertion is not fixed length at offset 10
Есть ли простой способ исправить эту ошибку? Я понимаю, что это происходит потому, что я использую шаблон «захватить все» с неопределенной длиной. Но я немного озадачен тем, как я могу это исправить. (Я на самом деле не волшебник регулярных выражений)