2014-10-29 116 views
0

我有幾個簡碼生成製表符,手風琴,鏈接圖片庫,圖標等,並能夠匹配他們的代碼,並在必要時刪除它們,但我結束了除去德國或俄羅斯的特殊字符。Preg替換方括號中的所有內容,包括方括號,但注意特殊字符

簡碼

<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

它與j修飾符一起工作,但對於php我將不得不從preg_replace切換到preg匹配全部,並且進一步複雜化應該是非常簡單的事情

替換[]或[] [/ ...] 但留下文字和特殊字符的機智。

任何見解都有幫助。

回答

1

這可能會實現: 替換此表達

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

這種表達

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

,它應該先不談Unicode字符。

php手冊上有一個usefull page

+0

不錯的一芽,缺少空間,但我想我找到那一個。我的最後一個數組允許空格 – Benn 2014-10-29 13:26:20

+0

[^ \ p {L} | \ p {N} \ s] +/u正常工作!謝謝! – Benn 2014-10-29 13:29:09

+1

啊,你已經準備好了。剛編輯我的答案:-) – Michel 2014-10-29 13:30:34

0

這可能會爲你工作

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

這是一個非常不完整的答案。請解釋所涉及的正則表達式,並展示一個與OP問題更相關的示例。 – 2014-10-29 14:45:54

相關問題