[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: perl Regexp für printable Unicode Characters



Hallo Marc,

02.11.2024 19:05:44 Marc Haber <mh+debian-user-german@zugschlus.de>:

> On Thu, 31 Oct 2024 22:21:20 +0100 (GMT+01:00), dh@dhaller.de wrote:
>> Ein erster (defensiver) Stupser:
>> ====
>> use v5.14;
>> # ...
>> qr/[\w\d\.+!\$%&()\]\[;\/{}>*'@_-]+/aai;
>> ====
>
> Hurga. Das ist aber schwere Kost, daran muss ich erstmal kauen. Kann
> ein paar Tage dauern.

Jo.

>> da fehlt ggfs. noch was ;) RTFM: 'perldoc perlre', Abschnitt "Modifiers",
>> (bes. "Character set modifiers"), Abschnitt
>> "Regular Expressions" (bes. "Escape sequences"
>> und "Character Classes and other Special Escapes")
>
> Das ist mir zu theoretisch ;-) /aa ist restriktiver als /a, und das
> soll mir helfen?

So wie ich das lese schon...
'perldoc perlunicode' hat auch ne Übersicht.

>> sowie 'perldoc perlrecharclass'.
>
> Interessant wären hier die Unicode Properties. Gibt es da vielleicht
> eine Property "printable" oder "word character"?

Jep.

> Können wir davon
> ausgehen dass es jenseits der 256 keine "bösen" Zeichen mehr gibt, die
> man definitiv nicht in einem Usernamen haben möchte? Vermutlich nicht,
> weil es gibt doch z.B. Zeichen die die Schreibrichtung umschalten, und
> die verschieden langen Spaces will man glaube ich auch nicht?

Genau.

> Um perlunicode, perlunitut und perluniintro zu lesen brauch ich auch
> eine Weile. Eine vorgekaut funktionierende Lösung würde ich auch
> nehmen.

Kann sein ich habs gefunden:

"\p{Graph}"
       Matches any character that is graphic.
       Theoretically, this means a character that on a
       printer would cause ink to be used.

Evtl. noch
"\p{Word}"
       This is the same as "\w", including over 100_000
       characters beyond ASCII.

oder
\p{L}  # Letters
\p{N}  # Numbers
\p{S}  # Symbols
\p{P}  # Punctuation

Also:
qr/^[\p{Graph}]+$/aa;
qr/^[\p{L}\p{N}\p{S}\p{P}]+$/aa;

ggfs. noch die Emojis \p{Emoticons}.
Zumindest versteh ich die Doku so.

Und dann gibts seit v5.18 Mengen Ops, siehe 'Extended Bracketed Character Classes' in perlrecharclass, z.B.

qr/^(?[ \p{print} - ( \p{Space} + \p{Private_Use} ) ])+$/aa;

Ich blick da aber auch nicht ganz durch.

HTH,
-dnh


Reply to: