Как сопоставить любой символ без пробела, кроме конкретного?


В Perl S соответствует любому символу.

Как я могу сопоставить любой символ без пробела, кроме обратной косой черты ?

4 84

4 ответа:

можно использовать класс персонажа:

/[^\s\]/

соответствует всему, что не является символом пробела или \. Вот еще один пример:

[abc] означает "матч a,b или c";[^abc] означает " соответствует любому символу, кроме a,b или c".

вы можете использовать lookahead:

/(?=\S)[^\]/

Это сработало для меня с помощью sed [Edit: комментарий ниже указывает, что sed не поддерживает \s]

[^ ]

пока

[^\s] 

не

# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg

echo "ghai ghai" | sed "s/[^ g]//g"
g g

в моей системе: CentOS 5

Я могу использовать \s вне коллекций, но должны использовать [:space:] внутри коллекций. На самом деле я могу использовать [:space:] только внутри коллекции. Поэтому, чтобы соответствовать одному пространству, используя это, я должен использовать [[:space:]] Что действительно странно.

echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: /"

Result: a b cX
  • первый пробел, который я сопоставляю с \s
  • второй пробел я сопоставляю альтернативно с [[:space:]]
  • X I соответствует "все, но нет места" [^[:space:]]

эти два не будут работать:

a[:space:]b  instead use a\sb or a[[:space:]]b

a[^\s]b      instead use a[^[:space:]]b