2017-09-06 10 views
3

正規表現の一部でテキストが完全に一致するかどうかチェックできますか?完全なテキストが正規表現の一部と一致するかどうかを確認しますか?

私は、(潜在的に)一致するテキストのプレフィックスであるテキストを一致させたいと思います。

ので、例えば、私は次の正規表現を持っている:

/etc/tomcat/conf/.* 

私は、ディレクトリ/etc/tomcat/conf/内のすべてのファイルにマッチしたいと思います。私は私の正規表現に対して完全なファイル名を照合することによってそれを行うことができます。しかし、最初にそのディレクトリに入る必要があるので、最初の行に/etc/etc/tomcatと入力する必要があるかどうか確認したいと思います。

一般的に実現できるのですか?私が正しく正規表現のマシンを理解していれば/et..tomcat//etc/tomcat/ agaistマッチしたことになるので、それは、可能なはず

/et..tomcat/con.* 

:ファイルにマッチする正規表現は、それが可能ですので、私は形で正規表現を取得したい、外部システムから来ますしかし、テキストがその瞬間にあり、部分con.*が満足されないので、一致は否定的となる。私は内部情報にアクセスするだけで、テキストが完全に消費されたが、正規表現は使われないようにする必要があります。

Javaはそれをチェックする手段を提供していますか?

+0

「Matcher」のドキュメント(https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html)を確認してください。おそらく 'hitEnd()'メソッドがあなたが探しているものです。 –

+0

@ VadimLandaおかげさまで、私は簡単なテストを行いました。それは私が必要とするものです。 –

+0

@LucasTrzesniewskiはい、その質問からの答えはまさに私が必要なものです。面倒な部分は、正規表現全体がテキストの一部にマッチしているのと同じで、逆ではないと思っていたので、私は部分マッピングを探していませんでした。 –

答えて

0

オーバーコンプレックス正規表現のみです。考え方としては、単一のサブディレクトリのために行くために、1が行う可能性がある。

Path full = Paths.get("/etc/tomcat/conf"); 

assert okay(full, Paths.get("/etc")); // -1- 
assert !okay(full, Paths.get("/and/so/on")); // -2- 

boolean okay(Path full, Path input) { 
    try { 
     input.relativize(full); // -1- "tomcat/conf" 
     return true; 
    } catch (IllegalArgumentException e) { 
     return false; // -2- 
    } 
} 

例外なく、もう少しコードが努力価値があるかもしれませんけど。

関連する問題