2016-11-20 6 views
-1

私のような検証文字列を正規表現下を使用しています\ folder1の正規表現がJavaクラスまたはJRegexクラスを使用して一致しないのはなぜですか?</p> <p>C:

X:\フォルダ

正規表現1: ^(?:[-ZA-Z ] :(\ | /)| file:// | \\ |。(/ | \))([^ \ /:* \?\ <> \ "\ |] +(\ | /){0,1 })+ $

正規表現2: ([AZ]:\ [^ /:\ \ < \ \]] \\ {2}} |(\ {2} [^ /: * \?<> \ |] +。\ w {2,6})

私は様々なサイトでのオンライン正規表現を検証し、それらが一致するが、Javaの\のJavaライブラリと一致しません:

例:デバッグモードで

String regex = ...load string from file... 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher("c:\\folder1"); 
m.matches(); //return false 
m.find(); //return false 

の式:

regex.equals("pasted regex manually") 
returns true for both regex 

私が検証正規表現と侵入者の文字がありません。

この動作は、JavaクラスとJRegexクラスの両方で発生します。

なぜですか? 私は何が間違っていますか?

ありがとうございます!

答えて

1

ファイルからパターンを取得した場合、バックスラッシュをエスケープする必要はありません。なぜなら、変数内の文字列を表現したい場合にのみ必要なためです。また、あなたのエスケープのほとんどは役に立たない。試験有する:

Regex1:

^(?:[a-zA-Z]:[\\/]|file://|\\\\|\.[\\/])([^\\:*?<>"|]+[\\/]?)+$ 

Regex2:

([A-Z]:\\[^/:*\\?<>|]+.\w{2,6})|(\\\\[^/:*\\?<>|]+.\w{2,6}) 
関連する問題