正規表現による特殊文字のマッチング


10

小文字と数字を含む何かを見つけたい場合は非常に簡単だとしましょう

produce_text | grep -E '[0-9a-z]'

ブラケットは一連の文字を照合するのに役立ちますが、やや特殊なものはどうでしょうか。
私は、ブラケットを使用して、一致させたい場合は任意の文字が、閉じ括弧:これらのいずれかの]「 - 」は、両方のスラッシュ、ダッシュ(ハイフン)/\、キャレット^、コロンを:
このように見えますか(これは機能しません)。

[^]-/ \ ^:]

回答:


11

ブラケット式のリテラル]とリテラルを一致させるに-は、次のように使用する必要があります。

[^]/\^:-]

または、一部のツールではバックスラッシュをエスケープする必要があるため、さらに優れています

[^]/\\^:-]

つまり
その特別な意味を失い、ブラケット表現で自分自身を表現し、それがリストの最初に発生した場合(「^」初期の後、もしあれば)ならない(「]」)右角括弧

ハイフンマイナス文字はなら最初に(最初の '^'がある場合は)後に、またはリストの最後に出現する場合、それ自体として扱われる
ため
、ブラケット式が '-'と ']'の両方を指定する場合、 ']'が最初に( '^'(存在する場合))および '-'が角かっこ式の最後にあります。
ブラケット式の規則は、EREBREで同じです。


2
安全のため、バックスラッシュを2倍にします。たとえば、多くのawk実装で必要になりperlます。
ステファンChazelas

「キャレットから閉じ括弧まで」についてはどうですか?同様に[^-]](この1つは失敗しましたか)?
iBug 2017

2
@iBug-文字どおりに一致させるには、右側のブラケットを最初にする必要があるため、失敗します。私は確かに私はあなたのように言及していること、その「範囲」のポイントを取得していないよ^後にされ]そう[^-]]であっても、両方の場合は動作しないでしょう^し、](同じように文字通り処理しました[b-a])。とにかく、あなたが例えばから一致したい場合は;、あなたが前に文字の範囲を使用することができブラケットをクローズする](バックスラッシュがある)とが含ま]例えばので、ブラケット表現に最初の文字として[];-\\]
don_crissti 2017

@don_crisstiどう[[.^.]-[.-.]]ですか?これでうまくいくと思います。のASCIIコード^がbefore であると仮定しましょう-
iBug 2017

私の質問のために怠惰な解決策を得ました。単純に同じように、照合文字にすべての特別なを取得する[^[.].][.-.]/\^:]
iBug

7

不思議なことに、特定の場所に2、3人のキャラクターを配置する必要があります。あなたは]セットの最初の文字として持つ必要があり、セット-の最後の文字でなければなりません。

要件を満たすREは次の[^]\^/-]とおりです。:

echo 'Hello[world]-[sun] ^^ 4/5 or 3\4' | grep -Eo '[^]\^/-]' | xargs
H e l l o [ w o r l d [ s u n 4 5 o r 3 4

1
それは本当に奇妙なことではなく、あいまいさを避けるために必要です
ケビン

1
2番目の[キャラクターはそこには属していません。OPはそれを除外したくありません。
スコット

@スコットはよく見つけた、ありがとう。回答を更新しました。
roaima
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.