高级Java正则表达式和模式匹配

高级Java正则表达式和模式匹配,java,regex,Java,Regex,以上各项工作如期进行 但是,如果my_路径在运行时是可确定的,那么是否存在“允许”静态final的预先存在的方法? e、 可能类似于Perl运行时代码评估 private static final String MY_MATCH = "(.+)/my_path/my_file[.](.+)"; 我对字符串替换感到不安,但我看不到任何其他解决方案。在MY\u MATCH中放置一些占位符,然后在运行时替换它?另外,设计模式与此有什么关系?这是否回答了您的问题?STR替代者看起来很有希望!我不喜欢不

以上各项工作如期进行

但是,如果my_路径在运行时是可确定的,那么是否存在“允许”静态final的预先存在的方法? e、 可能类似于Perl运行时代码评估

private static final String MY_MATCH = "(.+)/my_path/my_file[.](.+)";

我对字符串替换感到不安,但我看不到任何其他解决方案。

MY\u MATCH
中放置一些占位符,然后在运行时替换它?另外,
设计模式
与此有什么关系?这是否回答了您的问题?STR替代者看起来很有希望!我不喜欢不能将模式预编译成静态最终模式vs静态最终字符串。那部分是不可能的,对吗?嗯,你可以用一个。因此,它只工作一次,可以延迟到(本质上)应用程序启动。如果这能奏效,那么这是一个不错的选择。但是,如果您需要等到statup之后才能获取占位符中的值,那么静态块将没有帮助。我想你可以为模式设置一个getter,一旦你知道它是什么,计算它并缓存它,所以对getter的重复调用只会返回现有的getter。这似乎更适合于不使用正则表达式的方法。第一个捕获组可以通过
path.get(myPath).getParent().getParent()
获得。第二个捕获组可以通过
String filename=path.get(myPath).getFileName().toString()获得;字符串扩展名=filename.substring(filename.lastIndexOf('.')+1)
My solution(pseudo-code):

private static final String MY_MATCH = "(.+)/[unknown_path]/my_file[.](.+)";

static method (String my_path) {
//local var
String my_match = MY_MATCH;
my_match.replace("[unknown_path]", my_path));
Pattern my_pattern = Pattern.compile(my_match);
}