特定の文字以外の空白以外の文字に一致させる方法は?


111

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

バックスラッシュ以外の空白以外の文字をどのように一致させることができます\か?

回答:


154

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

/[^\s\\]/

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

[abc]「一致abまたはc」を意味します。[^abc]手段「以外の任意の文字と一致abまたはc」。


いつ^否定として解釈され、いつ行頭として解釈されますか?その点で、これが空白の数で始まる行と一致しない理由$0~/\s*^\s/
Alexander Cska

1
文字クラスの外では、「文字列の先頭」(または現在の一致モードに応じて行)です。文字クラスの内部で、それが開き角括弧の後の最初の文字である場合のみ、文字クラスの内容を無効にします。
Tim Pietzcker

次のマッチラインは、空白の数で始まり、$0~/\s*^\s/その後に空白でない文字が続く
Alexander Cska

1
それはおそらく/^\s+/-行の始まりで、その後に1つ以上の空白文字が続きます。
Tim Pietzcker

1
@AlexanderCska、あなたはそれを理解しましたか?上記の答えは、文字列の最初の一致のみを返します。すべての一致を返す場合は、g修飾子を追加します。/[^\s\\]/g
Ben Carp、

14

先読みを使用できます。

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

2
スペースでないと先を見ます。そして、ネガティブクラスは、クラスの文字以外のすべて(スペースではない)を受け入れます。
Denis de Bernardy、2011年

私はこのソリューションが好きです。「空白を除いて、私にすべての非単語を与える文字」のようなもののためにそれの良い:/(?=\S)\W/
jocull

引用符だけでなく空白以外の文字にも一致させる必要がある状況がありました。また、スペースを考慮に入れる必要がありました。例:THIS IS A TEST, AND AGAIN。次は私のためにうまくいきました(?=\S)[^"]*
Arvo Bowen

受け入れられた答えは私にとってはうまくいきませんでしたが、これはうまくいきました。私はこれを崇高なテキストの正規表現検索で使用していました
クリスチャンノエル

5

これはsedを使用して私に働きました[ 編集: 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

3
\s単なるスペース文字以上のものと一致します。これは、TAB、改行キャリッジリターン、および他の人を(どのように含まれる多くの他の人が正規表現の味に依存します)。これはPerlの発明であり、元々はPOSIX文字クラスの省略形であり、では[:space:]サポートされていませんsed。上記の最初の正規表現はですs/[^[:space:]g]//g
アランムーア

うん@AlanMooreの作品:echo "ghai ghai" | sed "s/[^[:space:]g]//g" 収量:g g
storm_m2138

1

私のシステム: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
  • 代わりに一致する2番目のスペース [[:space:]]
  • XIは「スペースを除くすべて」と一致します [^[:space:]]

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

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

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

1
sed 4.4の時点では、の([^[:space:]])代わりにを使用しなければならないことは明らかに依然として当てはまります([^\s])。私はopenSUSE Tumbleweed 2018 04 03に参加しています
user2394284
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.