2

基本的に、ファイル名を.json拡張子と一致させたいが、。で始まるファイルは一致させたくない。そしてlist.jsonを除外します。

これは私が出てくるものです(Java文字列エスケープなしで)

(?i)^([^\.][^list].+|list.+)\.json$

オンラインの正規表現テスターであるRegexplanetを使用して、正規表現を試しました http://fiddle.re/x9g86

正規表現テスターではすべて正常に動作しますが、Javaで試したところです。文字l、i、s、tが付いているものはすべて除外されます...これは私にとって非常に混乱します。

誰かが私にいくつかの手がかりを与えることができますか?

よろしくお願いします。

4

3 に答える 3

8

ファイル名を拡張子と一致させたい.jsonが、で始まり、.を除くファイルは一致させたくないlist.json

このために正規表現が必要かどうかはわかりません。私は次のことを目にははるかに簡単だと思います:

boolean match = s.endsWith(".json") && !s.startsWith(".") && !s.equals("list.json");
于 2013-03-27T06:27:07.280 に答える
1

[^list]文字の順序を無視し、を除外する代わりに、、、、、またはlistのすべてのケースを除外するl文字除外クラスを使用しています。ist

代わりに、ネガティブ先読みを使用します。

(?i)(?!^list\.json$)[^\.].*\.json
于 2013-03-27T06:28:22.327 に答える
1

ネガティブな先読みはそれを行います。

(?i)(?!\.|list\.json$).*\.json

(?!\.|list\.json$)list.jsonは、後続の文字の後に文字列の終わりまたは。が続かないことを確認する負の先読み.です。

コード:

String regex = "(?i)(?!\\.|list\\.json$).*\\.json";
System.out.println("list.json".matches(regex)); // false
System.out.println(".json".matches(regex));     // false
System.out.println("a.Json".matches(regex));    // true
System.out.println("abc.json".matches(regex));  // true

しかし、NPEのより読みやすいソリューションがおそらく好まれます。

于 2013-03-27T07:09:17.233 に答える