Preg替换方括号中的所有内容,包括括号,但要注意特殊字符


Preg replace everything in square brackets including brackets but watch for special chars

我有几个生成选项卡、手风琴、链接图片库、图标等的快捷代码,可以匹配它们的代码,并在必要时删除它们,但我最终也删除了德语或俄语的特殊字符。

短码

<br/>
[tabs id="myid" type="tabnav"]<br/>
[tabsgroup title="Tab title" active="1"]Tab für goes here...[/tabsgroup]<br/>
[tabsgroup title="Tab title" active="0"]Tab für goes here...[/tabsgroup]<br/>
[tabsgroup title="Tab title" active="0"]Tab Хёз но фырре доктюж котёдиэквюэ, нэ убяквюэ янжольэнж вэл ...[/tabsgroup]<br/>
[/tabs]<br/>

删除短代码

$cleanStr = preg_replace(array(
    '/parse/',
    '/pre/',
    '/imgs/',
    '/fa/',
    '/media/',
    '/stabsgroup/',
    '/stabs/',
    '/note/',
    '/acgroup/',
    '/acs/',
    '/stabs/',
    '/url="(.*?)"/',
    '/link="(.*?)"/',
    '/poster="(.*?)"/',
    '/width="(.*?)"/',
    '/height="(.*?)"/',
    '/resp="(.*?)"/',
    '/id="(.*?)"/',
    '/title="(.*?)"/',
    '/type="(.*?)"/',
    '/active="(.*?)"/',
    '/color="(.*?)"/',
    '/name="(.*?)"/',
    '/target="(.*?)"/',
    '/class="(.*?)"/',
    '/image="(.*?)"/',
    '/border="(.*?)"/',
    '/radius="(.*?)"/',
    '/icon="(.*?)"/',
    '/close="(.*?)"/',
    '/effect="(.*?)"/',
    '/days="(.*?)"/',
    '/hours="(.*?)"/',
    '/[^A-Za-z0-9?!'s]/i', // this here removes the brackets but it also removes  special chars
), array(
    ''
), $str);

我确实尝试了一个线性,但在某些情况下不起作用,所以我不得不像你在上看到的那样排列阵列

这是一条班轮http://regex101.com/r/gY3pT3/1

对于js,它可以使用g修饰符,但对于php,我必须从preg_replace切换到preg-match-all,这会使本应非常简单的变得更加复杂

替换[]或[][/…]内的所有内容但要巧妙地保留文本和特殊字符。

任何见解都是有益的。

这可能会起作用:替换此表达式

'/[^A-Za-z0-9?!'s]/i'

用这个表达式

'/[^'p{L}|'p{N}|'s]+/u'

它应该不使用unicode字符。

php手册上有一个有用的完整页面

这可能适用于

preg_match_all('#'b(rain|dry|clear)'b#', $string, $matches);