2017-04-21 137 views
1

我已經想出瞭如何在保留重音的同時過濾出非字母數字字符,但是我怎樣才能保留標點符號和常見的鍵盤字符!%$#(& @ *( )[]:;/- + _ =。,php正則表達式只保留字母數字拉丁字符,標點符號和html

我還需要保留字符串中的所有html標記和BR換行符。這可能嗎 ?

$caption = preg_replace('/[^\p{Latin}\d\s\p{P}]/u', '', $caption); 
+0

也許像'<\/?.+?>(* SKIP)(* FAIL)| [^ \ p {拉丁語} \ d \ s \ p {P}]'這並不是真的驗證它是一個HTML元素,不過更多的是你有一個'<' and a '>'與之間的東西。 – chris85

回答

1

這應該有效。它保留所有特殊鍵盤字符和全部 html標籤
並且只是針對其他項目。

正則表達式對標記和特殊字符使用原子分組。
結果應該很快。

絃樂器和分隔的形式'~..~'

'~(?>(?><(?:(?:(?:(script|style|object|embed|applet|noframes|noscript|noembed)(?:\s+(?>"[\S\s]*?"|\'[\S\s]*?\'|(?:(?!/>)[^>])?)+)?\s*>)[\S\s]*?</\1\s*(?=>))|(?:/?[\w:]+\s*/?)|(?:[\w:]+\s+(?:"[\S\s]*?"|\'[\S\s]*?\'|[^>]?)+\s*/?)|\?[\S\s]*?\?|(?:!(?:(?:DOCTYPE[\S\s]*?)|(?:\[CDATA\[[\S\s]*?\]\])|(?:--[\S\s]*?--)|(?:ATTLIST[\S\s]*?)|(?:ENTITY[\S\s]*?)|(?:ELEMENT[\S\s]*?))))>|[!%$#&@*()\[\]^:;/+_=.,\~-])(*SKIP)(*FAIL))|[^\p{Latin}\d\s\p{P}]~'

原料形態:

(?>(?><(?:(?:(?:(script|style|object|embed|applet|noframes|n‌​oscript|noembed)(?:\‌​s+(?>"[\S\s]*?"|'[\S‌​\s]*?'|(?:(?!/>)[^>]‌​)?)+)?\s*>)[\S\s]*?<‌​/\1\s*(?=>))|(?:/?[\‌​w:]+\s*/?)|(?:[\w:]+‌​\s+(?:"[\S\s]*?"|'[\‌​S\s]*?'|[^>]?)+\s*/?‌​)|\?[\S\s]*?\?|(?:!(‌​?:(?:DOCTYPE[\S\s]*?‌​)|(?:\[CDATA\[[\S\s]‌​*?\]\])|(?:--[\S\s]*‌​?--)|(?:ATTLIST[\S\s‌​]*?)|(?:ENTITY[\S\s]‌​*?)|(?:ELEMENT[\S\s]‌​*?))))>|[!%$#&@*()\[‌​\]^:;/+_=.,~-])(*SKI‌​P)(*FAIL))|[^\p{Lati‌​n}\d\s\p{P}]

相關問題