- PR -

ディレクトリパスの正規表現

投稿者投稿内容
ちょめ
会議室デビュー日: 2008/03/26
投稿数: 5
投稿日時: 2008-03-26 23:20
いつもお世話になっています。

現在ディレクトリパスの正規表現で、
半角英数字と、*, ?, <, >, | 以外の記号を許す内容にしたいのですが、
1つの正規表現で書けないか悩み中です。

最悪、[a-zA-Z0-9]を通した後に、[^*?<>|]を通す形になるかと思っていますが、
できるだけ1つにまとめた形で実装したいので、何か方法を知ってる方がいましたら、
ご教示ください。宜しくお願いします。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-03-27 00:38
エスケープすればいけるみたいですよ。
\* ってやれば * 自身を指します。

でも、* と ? はワイルドカードですけど認識してます?
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2008-03-27 04:21
引用:

現在ディレクトリパスの正規表現で、
半角英数字と、*, ?, <, >, | 以外の記号を許す内容にしたいのですが、
1つの正規表現で書けないか悩み中です。



この日本語では掛かり受けが明確でないので、
半角英数字を許すのか許さないのかわかりません。

また、NTFSなら使えない文字は「<>:"/|」です。

NTFSで使用不可能な文字を検出したいだけなら
[\x00-\x1F\x7F<>:"/\|]
でいいと思います。

パスのセクションを認識させたいなら
([\x00-\x1F\x7F<>:"/\|]+\\)
とでもすればよいでしょう。

ですが、パス文字の解析に正規表現を用いるのはあまりオススメしません。
また、自分で作れないほど難しい表現を作るのも、後々面倒になると思います。

素直に先頭から解析したほうがいろいろ利点が多いと思います。
ちょめ
会議室デビュー日: 2008/03/26
投稿数: 5
投稿日時: 2008-03-27 10:43
すみません。日本語ベタ & 説明不足でした。。。

今回使用する正規表現は

・半角英数字・記号のみを許す。
 ※記号については *, ?, <, >, | の記号以外

といったものです。

上記の正規表現はディレクトリパスのバリデータにしてはゆるいのですが、
今回はこの程度のレベルでかまわないということで、
上記正規表現を作成しようとしています。

半角英数字・記号のみを許すという正規表現は[a-zA-Z!-~]で
足りるのですが、そこから *, ?, <, >, | を除くというのを
1つの正規表現で実装したいと思っています。

ぴあちゃんさん
>\* ってやれば * 自身を指します。
>でも、* と ? はワイルドカードですけど認識してます?
おっしゃるとおりです。\*はエスケープの必要がありますね。。。
ちょめの知識不足です。


indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-27 12:15
引用:

1つの正規表現で実装したいと思っています。



意味がわかりました。集合を結合した言ってことですね。

^([a-zA-Z0-9]|[^<>|])*$ 

(エスケープははずしています。前後の^$は不要なら削除してください)

て書けばいいのでは
ちょめ
会議室デビュー日: 2008/03/26
投稿数: 5
投稿日時: 2008-03-27 13:18
indigo-xさん
回答ありがとうございます。

しかし、^([a-zA-Z0-9]|[^<>|])*$ でやると
全角が通ってしまうみたいです。(<, >, | ははじけます。)

同じような書き方をいろいろ試してみたんですが、全角が通ってしまう。。。
後半の[^<>|]のみを見てしまってるんですかねぇ。。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-03-27 13:40
サンプルだったので厳密ではありません。

以下を参照して書き換えてもらえれば対応可能と思います。

http://www.atmarkit.co.jp/fdotnet/dotnettips/054iskana/iskana.html
ちょめ
会議室デビュー日: 2008/03/26
投稿数: 5
投稿日時: 2008-03-27 17:19
レス遅れてすみません。

indigo-xさんアドバイスありがとうございます。
いろいろ試したのですが、未だ出来ず(自分の知識では・・・)にいます。
時間もないので、最悪の場合の処理をとろうと思います。。。

まず半角英数字・記号のみかをチェックして、
そのあと *, ?, <, >, | が含まれていないかをチェックする
という2段構成です。。

アドバイス、指摘を下さったみなさんありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)