In Perl \S
stimmt jedes Nicht-Leerzeichen überein.
Wie kann ich ein Nicht-Leerzeichen außer einem Backslash abgleichen \
?
Sie können eine Zeichenklasse verwenden :
/[^\s\\]/
passt zu allem, was weder ein Leerzeichen noch ein Leerzeichen ist \
. Hier ist ein weiteres Beispiel:
[abc]
bedeutet „Spiel a
, b
oder c
“; [^abc]
bedeutet „ mit Ausnahme jedes Zeichen a
, b
oder c
“.
^
als Negation interpretiert und wann als Zeilenanfang? In dieser Hinsicht, warum dies nicht mit einer Linie übereinstimmt, die mit der Anzahl der Leerzeichen$0~/\s*^\s/
$0~/\s*^\s/
gefolgt von einem Zeichen, das kein Leerzeichen ist/^\s+/
- Zeilenanfang, gefolgt von einem oder mehreren Leerzeichen.g
Modifikator hinzu./[^\s\\]/g
Sie können einen Lookahead verwenden:
quelle
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. Das Folgende hat bei mir gut funktioniert(?=\S)[^"]*
.Dies funktionierte bei mir mit sed [ Bearbeiten: Kommentar unten weist darauf hin, dass sed \ s nicht unterstützt]
während
nicht
quelle
\s
entspricht mehr als nur dem Leerzeichen. Es enthält TAB, Zeilenvorschubwagenrücklauf und andere (wie viele andere hängen vom Regex-Geschmack ab). Es ist eine Perl-Erfindung, ursprünglich eine Abkürzung für die POSIX-Zeichenklasse[:space:]
, die in nicht unterstützt wirdsed
. Ihre erste Regex oben sollte seins/[^[:space:]g]//g
.echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Erträge:g g
Auf meinem System: CentOS 5
Ich kann
\s
außerhalb von Sammlungen verwenden, muss aber[:space:]
innerhalb von Sammlungen verwenden. Tatsächlich kann ich[:space:]
nur innerhalb von Sammlungen verwenden. Um ein einzelnes Leerzeichen damit abzugleichen, muss ich das verwenden,[[:space:]]
was wirklich seltsam ist.\s
[[:space:]]
[^[:space:]]
Diese beiden werden nicht funktionieren:
quelle
([^[:space:]])
stattdessen verwenden müssen([^\s])
. Ich bin auf openSUSE Tumbleweed 2018 04 03.