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

时间:2014-10-29 12:48:21

标签: php regex preg-replace

我有几个生成标签,手风琴,链接图片库,图标等的短代码,并且能够匹配他们的代码并在必要时删除它们,但我最终还删除了德语或俄语特殊字符。

短代码

<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匹配所有并且进一步复杂化应该非常简单的东西

替换[]或[] [/ ...]内的所有内容 但请保留文字和特殊字符。

任何见解都很有帮助。

2 个答案:

答案 0 :(得分:1)

这可能有用: 替换此表达式

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

使用此表达式

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

它应该只保留unicode字符。

php手册上有usefull page

答案 1 :(得分:0)

这可能适合你

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