- PR -

正規表現について

投稿者投稿内容
Marionette
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 70
投稿日時: 2003-09-25 13:48
引用:
コード:
C:\\project\app\test.tl


のように\\を不可にすることができますね。


あれ、不可になってますか? perlで試したのがまずかったかな?
それと、最後に "$"を忘れてました。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-09-25 14:32
ども、ほむらです。
えと。。まずは。
僕の書いた正規表現ですがMarionette氏の指摘どおり
C:\\project\app\test.tl
というのも、とおります。
原因は
コード:
[^/:;,*?<>\|]*[^\\]\\

が最長マッチになっているためです。
やはり、Marionette氏のような正規表現(パス単位に区切る)にするのが良いみたいです。

ちなみに、この正規表現日本語でも問題ないはずなのですが。。。。

以下テストで使用したPerlのコードです。
参考になるかな?
コード:

use strict;
## 入力に使用するファイル名
my $fn = "C:project\\app\\テスト.tl";
## ファイル名と拡張子名の定義
my $ok = '([^\\\\/:;,*?<>|]+)';
print "FileName: $fn\n";
print "Result : " ;
if( $fn =~ m/^(?:[A-Za-z]:)?(\\?$ok)*\\$ok\.$ok$/ ){
print "true " . ($1 || '');
}
else {
print "false";
}
print "\n";


<結果>
FileName: C:project\app\テスト.tl
Result : true \app
</結果>

# $1が消えてしまったので修正
# 半角だと消えてしまうので全角で書いてみる。。


[ メッセージ編集済み 編集者: ほむら 編集日時 2003-09-25 14:47 ]
イルカ
会議室デビュー日: 2003/09/04
投稿数: 6
投稿日時: 2003-09-25 15:28
ほむらさんありあとうございます。

コード:
^([A-Za-z]:)?[^\/:;,*?<>\|]*[^\\]\\[^\\\/:;,*?<>\|]+\.[^\\\/:;,*?<>\|]+$



で、ファイルが日本語名でも通りますね。クライアント側はこのValidationを行って、
サーバー側でファイルパスが存在するか検証しているので
コード:
c:\\test\app


というように重なっても
エラーとして返すようにしました。

全てを正規表現だけで実現しようとするのにはなかなか無理がありますね。

ありがとうございました。

_________________

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