Как сопоставить текст внутри начальной и закрывающей фигурной скобки, теги и указанные атрибуты
Я реализую код плагина для моей системы CMS. Что-то вроде шорткода, но будет применимо во многих сценариях. Я хочу, чтобы админ написал свой код так:
Пример 1:
{COMMAND_NAME}Strings of texts that conatains htmltags,symbols,just anything{/COMMAND_NAME}
Пример 2
{COMMAND_NAME}
Пример 3
{COMMAND_NAME{attriute1=value attribute2=value}}
Пример 4
{COMMAND_NAME{attriute1=value attribute2=value}}Strings of anything including texts, htmltags and anything at all {/COMMAND_NAME}
Regex может соответствовать приведенной выше строке. ПолучитьCOMMAND_NAME
, получить текст между и получить закрытие{/COMMAND_NAME}
из одного шаблона регулярных выражений.
В регулярном выражении я хочу захватитьCOMMAND_NAME
атрибуты, если они указаны, текст между{COMMAND_NAME}
имеет закрытие{/COMMAND_NAME}
и закрытие{/COMMAND_NAME}
если предусмотрено.
Посмотрите, что я сделал до сих пор, и получите какой-то неполный результат.
$regex = #\{(RAW|ACCESS|DWNLINK|MODL)[\{]{0,1}([\w\W\s]*?)\}{0}\}([\w\s]+)([\{/RAW|ACCESS|DWNLINK|MODL]*)\}#i
$strings = '<div class="blog-list-item blog"><header class="entry-title">
<h1>Welcome to our website</h1>
</header><article id="entry-72" class="entry post-72 page et-bg-layout-dark et-white-bg"><div class="jumbotron row">
<div class="col-md-8">
<ul>
<li>You have a pending job on your neck?…</li>
<li>Do your company need a website makeover ?…</li>
<li>Or a competitive web application ? ?…</li>
<li>Do you need a customized plugin, or a tweak ?…</li>
<li>Maybe you want a personal website ?…</li>
<li>Or a graphic for your new project ?…</li>
</ul>
<div class="bg-primary well">
<h4 class="text-center text-white shadow">Track your project as we work it to perfection...</h4>
</div>
</div>
<div class="pull-right col-md-4">
<h4 class="bg-primary text-white well">Other services we offer</h4>
{ACCESS{type=500}}
<ul>
<li>SEO work for an existing website or new</li>
<li>Bulk SMS</li>
<li>E-currency exchange</li>
<li>Facebook AD</li>
<li>Google AD</li>
</ul>
{/ACCESS}</div>
{RAW{say=email,access=500}} {RAW} <a class="btn button large tall green" href="client-area">Place new Job now as we deliver at the quickest <em>reasonable time</em></a>{/RAW}</div></article></div>';
And doing a php var_dump, gives the following result:
array(5) {
[0]=>
array(1) {
[0]=>
string(224) "{ACCESS{type=500}}
<ul>
<li>SEO work for an existing website or new</li>
<li>Bulk SMS</li>
<li>E-currency exchange</li>
<li>Facebook AD</li>
<li>Google AD</li>
</ul>
{/ACCESS}</div>
{RAW{say=email,access=500}} {RAW}"
}
[1]=>
array(1) {
[0]=>
string(6) "ACCESS"
}
[2]=>
array(1) {
[0]=>
string(209) "type=500}}
<ul>
<li>SEO work for an existing website or new</li>
<li>Bulk SMS</li>
<li>E-currency exchange</li>
<li>Facebook AD</li>
<li>Google AD</li>
</ul>
{/ACCESS}</div>
{RAW{say=email,access=500}"
}
[3]=>
array(1) {
[0]=>
string(1) " "
}
[4]=>
array(1) {
[0]=>
string(4) "{RAW"
}
}
Что на самом деле не то, что мне нужно было восстановить. Еще раз, я хочу захватитьCOMMAND_NAME
, атрибуты только при условии, текст между, если{COMMAND_NAME}
имеет закрытие{/COMMAND_NAME}
и закрытие{/COMMAND_NAME}
если предусмотрено. Это означает, что команда может быть встроенной{COMMAND_NAME}
, или нет{COMMAND_NAME}
некоторые строки{/COMMAND_NAME}
, имеет атрибут{COMMAND_NAME{attr1=value attr2=value2}}
или нет.