web-dev-qa-db-ja.com

特定の文字以外の任意の非空白文字に一致させるには?

Perlでは、\Sは空白以外の文字と一致します。

バックスラッシュ\以外の空白以外の文字に一致させるにはどうすればよいですか?

95
Lazer

文字クラス を使用できます。

/[^\s\\]/

空白文字でも\でもないものに一致します。別の例を次に示します。

[abc]は、「ab、またはcに一致」を意味します。 [^abc]は、「ab、またはcを除く任意の文字に一致」を意味します。

132
Tim Pietzcker

先読みを使用できます。

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

これは私のために働いた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
2
storm_m2138

私のシステム:CentOS 5

コレクションの外部で\sを使用できますが、コレクションの内部で[:space:]を使用する必要があります。実際、[:space:]はコレクション内でのみ使用できます。これを使用して単一のスペースを一致させるには、[[:space:]]を使用する必要がありますが、これは本当に奇妙です。

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

Result: a b cX
  • \sと一致する最初のスペース
  • 代わりに[[:space:]]と一致する2番目のスペース
  • 「スペースを除くすべて」と一致するX [^[:space:]]

これら2つは機能しません。

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

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