1

私のアプリケーションのユーザーは正規表現を使用して、アプリケーションが取得する必要があるファイルと除外する必要があるファイルを指定します。たとえば、一致するファイルを含めますfoo.*\.txt

ただし、実行時にアプリケーションのみが認識できる値をフィルターで使用する必要がある場合があります。たとえば、フィルターがfoo[SPECIALVALUEHERE].*\.txtで、特別な値がたまたま bar である場合、実際のフィルターは次のようになります。foobar.*\.txt

[SPECIALVALUEHERE] の指定に使用できる文字は? あいまいさを避けるために、正規表現の特殊文字/予約文字ではなく、ファイルで発生する文字ではない必要があると思います。顧客からのもう 1 つの要件は、1 文字 (または多くて 2 つまたは 3 つ) のみでなければならないということです。そのため、%SPECIALVALUE% のようなものは問題外です。

この目的のためにどの文字または文字の組み合わせを使用できるかについての提案。

4

3 に答える 3

1

正規表現(文字クラスの外)で特別な意味を持ち、エスケープする必要があるシンボルは12個だけです。

  • ユニキャラクター:.
  • 文字列の開始/終了アンカー:^ $
  • 数量詞:+ * ?
  • グループ区切り文字のキャプチャ:( )
  • 数量詞の開始区切り文字:{
  • 文字クラスの開始区切り文字:[
  • 交代記号:|
  • そして、最後のエスケープシンボル自体:\

それらをエスケープするには(=特別な意味のストリップ)、\記号を前に付けるだけです。#正規表現の特別な部分を区切るには、特別ではない英数字以外の記号を使用できます~。すぐに思い浮かびます。)。

補足として、Perlでは正規表現の一部を\Q...\E演算子で自動的に引用できます。

于 2012-10-01T17:16:42.527 に答える
1

たとえば=、正規表現では特殊文字ではありませんが、ファイル名では許可されていません (ここでは、Windows のファイル名で使用できない文字の表) を使用できます。= を必要なものに置き換えることができます。

それ以外の場合、UNIXシステムでは、任意のバイトシーケンスが制限なしでファイル名の一部になる可能性があるため、かなり混乱します。ここでは serverfault に関する参照質問です。正規表現。

于 2012-10-01T17:41:26.747 に答える
1

この種のものには、二重中括弧を使用しました。私が使用する正規表現方言は、カーリー内のカーリーを認識しないため、正規表現では有効な文字列ではありません。 foo{{SPECIALVALUEHERE}}\.txt

于 2012-10-01T17:58:54.710 に答える