1

「」のようなパスと照合する必要がある正規表現がありますC:\Documents and Settings\User\My Documents\ScanSnap\382893.pd~。「~」または「 」で終わるパスを除くすべてのパスに一致する正規表現が必要.datです。.dat私が抱えている問題は、正確な文字列 ' ' をパスの最後にのみ一致させて否定する方法がわからないことです。{d,a,t}つまり、パスの他の場所と一致させたくありません。

正規表現を作成しましたが、.dat と一致する必要はありません

[\w\s:\.\\]*[^~]$[^\.dat]

[\w\s:\.\\]* これは、すべての単語、空白、コロン、ピリオド、およびバックスペースに一致します。 [^~]$[^\.dat]$ これにより、'~' で終わる一致が失敗します。「.dat」の否定一致でフォローアップできるはずですが、正規表現テスターで一致が失敗します。

私の答えは、私が読んだことから判断してグループ化にあると思います。誰かが私を正しい方向に向けてくれますか? 追加する必要がありますが、正規表現の一致を可能にするファイル監視プログラムを使用しています。正規表現を指定する行は 1 行しかありません。

このエントリは似ているようです:複数の文字列に一致する正規表現

4

4 に答える 4

5

否定的な先読みを使用したい場合:

^((?!\.dat$)[\w\s:\.\\])*$

ところで、あなたの文字グループ ( [\w\s:\.\\]) では、チルダ (~) を使用できません。チルダが最後にない場合、ファイル名にチルダを含めることを許可するつもりでしたか? もしそうなら:

^((?!~$|\.dat$)[\w\s:\.\\~])*$
于 2009-10-08T17:33:37.147 に答える
3

次の正規表現:

^.*(?<!\.dat|~)$

'~' または '.dat' で終わらない任意の文字列に一致します。

^             # the start of the string
.*            # gobble up the entire string (without line terminators!)
(?<!\.dat|~)  # looking back, there should not be '.dat' or '~'
$             # the end of the string

平易な英語で:文字列の末尾から後ろを見て、部分文字列 '.dat' または '~' がない場合にのみ文字列に一致します

編集:試行が失敗した理由は、否定された文字クラス [^...] が単一の文字を否定するためです。文字クラスは常に 1 文字に一致します。したがって、[^.dat] を実行すると、文字列 ".dat" が否定されるのではなく、"."、"d"、"a"、"t" 以外の 1 文字に一致します。

于 2009-10-08T18:16:25.547 に答える
2
^((?!\.dat$)[\w\s:\.\\])*$

これは、以前の回答の提案に対する単なるコメントです。

. 文字クラス内の [] はリテラルです。エスケープする必要はありません。

^((?!\.dat$)[\w\s:.\\])*$

これを新しい解決策として投稿して申し訳ありませんが、回答についてコメントするだけの信頼性はまだないようです。

于 2009-10-08T18:20:12.247 に答える
-2

私はあなたがこれを探していると信じています:

[\w\s:\.\\]*([^~]|[^\.dat])$

これは、以前と同様に、すべての単語文字、空白、ピリオド(。)、バックスラッシュを検出します。次に、文字列の最後にあるチルダ(〜)または「.dat」のいずれかに一致します。文字列が改行の先頭にある必要があることがわかっている場合は、先頭にカレット(^)を追加することもできます。

^[\w\s:\.\\]*([^~]|[^\.dat])$
于 2009-10-08T17:38:32.627 に答える