Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove non printable utf8 characters except controlchars from String

I've got a String containing text, control characters, digits, umlauts (german) and other utf8 characters.

I want to strip all utf8 characters which are not "part of the language". Special characters like (non complete list) ":/\ßä,;\n \t" should all be preserved.

Sadly stackoverflow removes all those characters so I have to append a picture (link).

Any ideas? Help is very appreciated!

PS: If anybody does know a pasting service which does not kill those special characters I would happily upload the strings.. I just wasn't able to find one..

[Edit]: I THINK the regex "\P{Cc}" are all characters I want to PRESERVE. Could this regex be inverted so all characters not matching this regex be returned?

like image 704
friesoft Avatar asked Mar 20 '13 10:03

friesoft


1 Answers

You have already found Unicode character properties.

You can invert the character property, by changing the case of the leading "p"

e.g.

\p{L} matches all letters

\P{L} matches all characters that does not have the property letter.

So if you think \P{Cc} is what you need, then \p{Cc} would match the opposite.

More details on regular-expressions.info

I am quite sure \p{Cc} is close to what you want, but be careful, it does include, e.g. the tab (0x09), the Linefeed (0x0A) and the Carriage return (0x0D).

But you can create you own character class, like this:

[^\P{Cc}\t\r\n]

This class [^...] is a negated character class, so this would match everything that is not "Not control character" (double negation, so it matches control chars), and not tab, CR and LF.

like image 115
stema Avatar answered Sep 19 '22 00:09

stema