0

考えられるすべてのテストケースで「機能する」正規表現を作成しました。基本的に、次のパターンに一致する任意の URL:

/app.* AND の最後に長さ 1 ~ 4 の拡張子がない場合は、書き換える必要があります。私が思いついた:

/app((?:\\/[\\w([^\\..]{1,4}\b)\\-]+)+)

問題は、これを単純化して同じことを達成できるかどうかです。また、\w の使用を .* のようなものに置き換えることはできますか?間違っている可能性がありますが、奇妙な文字を含む URL に遭遇するとすぐに URL が壊れると思います。

編集 1: 一致する URL の例:

/app AND /app/
/app/auth
/app/auth/fb
/app/auth/twitter
/app/groups
/app/conn/manage
/app/play
/app/play/migrate
/app/play/migrate/done

一致してはならない URL の例:

/app/js/some.file.js
/app/js/jquery.js
/app/styles/default/rain.css
/app/styles/name/file.css
/app/tpl/index.tpl
/app/tpl/file.html
/app/tpl/some.other.tpl

ありがとう。

4

2 に答える 2

2

より良いアプローチは、Web サーバーに処理させたいすべてのアセットを単一のディレクトリに配置することだと思います。のように、など/app/publicを取得しますapp/public/jsapp/public/htmlこれにより、エッジ ケースがなくなり、URL の処理がはるかに簡単になります。

とにかく、以下の正規表現はあなたが尋ねた質問に答えると思います:ファイルに1〜4文字の拡張子がある場合を除いて、何でも一致します。

^(\/(\w+))*\/?(\.\w{5,})?\??([^.]+)?$

http://rubular.com/r/4CQ4amccH5

^              //start of anchor
  (
    \/         //match forward slash
    (\w+)      //match any word character, match atleast once 
  )+           //match this group atleast once (this group captures /app/etc/etc)
  \/?          //match a forward slash, make it optional (to also capture /app/)
  (\.\w{5,})?  //match any word after a . with 5 characters or more, make it optional
  \??          //match a ?, make the match optional
  ([^.]+)?     //match anything not containing a . 1 or more times, make the match optional
$              //end of anchor

これを Java で機能させるには、主に多くのエスケープ文字をエスケープする作業が必要です。

于 2013-01-31T10:16:22.653 に答える
0

あなたの正規表現は次のようになります。

/app(/\w+)*/?$

ファイル拡張子ではなくスラッシュで終わる可能性のある単語文字と URL を一致させる必要があると想定しました。

于 2013-01-31T10:34:25.000 に答える