1. ホーム
  2. regex

[解決済み] 正規表現でバックスラッシュをエスケープできない?

2022-05-26 13:47:25

質問

私は以下の正規表現を使用しています。

^[a-zA-Z0-9\',!;\?\$\^:\\\/`\|~&\" @#%\*\{}\(\)_\+\.\s=-]{1,1000}$

醜いのは分かっていますが、今のところ、バックスラッシュがエスケープされているために私が考えるように許可されていないこと以外は、目的を果たしています。 \\ の代わりに \\\ に変更しましたが、同じ結果です。何かアイデアはありますか?

どのように解決するのですか?

プログラム内の文字列にこれを入れる場合、実際にはバックスラッシュを 4 つ使用する必要があるかもしれません (文字列パーサが 文字列 のためにバックスラッシュを2つ削除し、正規表現ではエスケープされた正規表現のバックスラッシュのために2つを必要とするためです)。

例えば

regex("\\\\")

は以下のように解釈されます。

regex("\\" [escaped backslash] followed by "\\" [escaped backslash])

は以下のように解釈されます。

regex(\\)

は単一のバックスラッシュにマッチする正規表現として解釈されます。


言語によっては、エスケープシーケンスを解析しない別の形式のクオートを使用して、多くのクオートを使用する必要がないようにできるかもしれません - 例えば、Pythonのような場合。

re.compile(r'\\')

r は、引用符の前にある 文字列となり、バックスラッシュエスケープは解析されません。