12

一致する JavaScript ファイルを見つける正規表現を作成する必要があります。

<anypath><slash>js<slash><anything>.js

たとえば、次の両方で機能するはずです。

  • c:\mysite\js\common.js (Windows)
  • /var/www/mysite/js/common.js (UNIX)

問題は、Windows のファイル セパレータが適切にエスケープされていないことです。

pattern = Pattern.compile(
     "^(.+?)" + 
     File.separator +
     "js" +
     File.separator +
     "(.+?).js$" );

投げ

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence

Windows システムと UNIX システムの両方で機能する共通の正規表現を使用する方法はありますか?

4

5 に答える 5

14

Pattern.quote(File.separator)トリックを行いますか?

編集: これは Java 1.5 以降で利用可能です。1.4 の場合、ファイル区切り文字を単純にエスケープする必要があります。

"\\" + File.separator

句読点をエスケープしても何も壊れませんが、文字や数字を無条件にエスケープすると、それらが特別な意味に変わるか、PatternSyntaxExceptionが発生します。(コメントでこれを指摘してくれたAlan Mに感謝します!)

于 2008-10-28T10:32:10.783 に答える
6

Windows システムと UNIX システムの両方で機能する共通の正規表現を使用する方法はありますか?

はい、両方の種類のセパレーターに一致する正規表現を使用してください。

pattern = Pattern.compile(
    "^(.+?)" + 
    "[/\\\\]" +
    "js" +
    "[/\\\\]" +
    "(.+?)\\.js$" );

Windows も Unix もファイル名やディレクトリ名にこれらの文字を許可していないため、安全です。

于 2008-10-28T15:08:07.277 に答える
2

次のようにバックスラッシュを使用してパス区切り記号をエスケープすることはできませんか。

pattern = Pattern.compile(
     "^(.+?)\\" + 
     File.separator +
     "js\\" +
     File.separator +
     "(.+?).js$" );
于 2008-10-28T10:33:02.043 に答える
1

逃げてみませんかFile.separator:

... +
"\\" + File.separator +
...

要件を満たすにはPattern.compile?"/" (unix の場合) は 1 つの "/" として処理されることを願っています。

于 2008-10-28T10:34:44.193 に答える
0

私はUnixシステムでgimelの答えをテストしました-パッティング"\\" + File.separatorはうまくいきます-結果として得られる"\/"パターンは単一のものと正しく一致します"/"

于 2008-10-28T10:45:12.330 に答える