0

URL パスを指定して、パスがディレクトリを指している場合は一致し、ファイル拡張子 .php、.js、.html、.htm などを指している場合は一致しない正規表現を作成しようとしています。

マッチ:

/www/site/path/ny/

マッチ:

/www/news/state.208/ii

一致しない:

/www/news/index.php

一致しない:

/www/site/fr/post.py

これが私が取り組んできた私の正規表現です:

^([a-zA-Z0-9/_\-]*[^/])$

この正規表現は私が望むことを行いますが、十分に正確ではありません。ファイルへのパスであると想定し、「.」に遭遇すると一致を停止しますが、上記の例のようにディレクトリ名に「.」が含まれる可能性を考慮する必要があります。

私はまた、運のない否定的な後ろ姿を使ってみました:

^(.(?!\.php)|(?!\.htm?l)|(?!\.js))$
4

3 に答える 3

2

pathinfoPHP を使用しているため、代わりに次の方法を試してください。

$parts = pathinfo('/www/site/path/file.php');

この場合$parts['extension']は存在しますが、それ以外の場合は存在しません。

于 2012-12-07T12:38:34.980 に答える
2

この小さなものを試してください:

^.*/[^\.]*$

編集:

^.*/((?!\.js|\.php|\.html).)*$

無視したい拡張子に置き換えるか拡張します。

于 2012-12-07T12:38:59.800 に答える
1

質問を簡単にするために、/ で始まる文字列を探しており、最後のセグメントには拡張子がありません。

[\/]{0,1}.*\/[^\.]*.{1}$

編集:

これはすべての例で機能します:

^(.*\/){0,1}[^\.]*.{1}$
于 2012-12-07T12:38:31.930 に答える