В Perl \S
соответствует любому непробельному символу.
Как я могу сопоставить любой непробельный символ, кроме обратной косой черты \
?
Вы можете использовать класс символов :
/[^\s\\]/
соответствует всему, что не является пробельным символом или символом \
. Вот еще один пример:
[abc]
означает «матч a
, b
или c
»; [^abc]
означает «любой символ , кроме a
, b
или c
».
^
интерпретируется как отрицание, а когда как начало строки? В этом отношении, почему это не соответствует строке, начинающейся с количества пробелов,$0~/\s*^\s/
$0~/\s*^\s/
за которым следует любой символ,/^\s+/
- начало строки, за которым следует один или несколько пробелов.g
модификатор./[^\s\\]/g
Вы можете использовать опережающий просмотр:
источник
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. Следующее сработало для меня(?=\S)[^"]*
.Это сработало для меня, используя sed [ Изменить: комментарий ниже указывает, что sed не поддерживает \ s]
пока
не сделал
источник
\s
соответствует не только пробелу. Он включает TAB, возврат каретки перевода строки и другие ( количество других зависит от вкуса регулярного выражения). Это изобретение Perl, первоначально сокращенное для символьного класса POSIX[:space:]
и не поддерживаемое вsed
. Ваше первое регулярное выражение выше должно бытьs/[^[:space:]g]//g
.echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Урожайность:g g
В моей системе: CentOS 5
Я могу использовать
\s
вне коллекций, но должен использовать[:space:]
внутри коллекций. Фактически я могу использовать[:space:]
только внутри коллекций. Итак, чтобы сопоставить одно пространство, используя это, я должен использовать[[:space:]]
Что действительно странно.\s
[[:space:]]
[^[:space:]]
Эти два не будут работать:
источник
([^[:space:]])
вместо([^\s])
. Я использую openSUSE Tumbleweed 2018 04 03.