public static void main(String[] args) {
// TODO Auto-generated method stub
String a="/Construction/src/Inventory/PeportsUI/sql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql";
String b="/Construction/src/Inventory/UI/sql/inventory_query_update_Ciena.sql";
System.out.println(a.replaceFirst(".*/.[^(sql|plsql)]*/", ""));
System.out.println(b.replaceFirst(".*/.[^(sql|plsql)]*/", ""));
}
两者都应该得到输出AS
sql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql
sql/inventory_query_update_Ciena.sql
但我得到了以下输出
PeportsUI/sql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql
sql/inventory_query_update_Ciena.sql
为什么请解释一下?
答案 0 :(得分:0)
您当前的正则表达式存在一些问题。您似乎尝试使用字符类sql
来表达 not 匹配plsql
或[^(sql|plsql)]
。但这不会按预期工作,这实际上意味着不匹配括号内的任何字符。如果你想采用这种方法,你必须使用某种方法来做到这一点。但是,我认为可以编写一个简单的正则表达式,如下所示。
public static void main(String args[]) {
String a = "/Construction/src/Inventory/PeportsUI/sql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql";
String b = "/Construction/src/Inventory/UI/sql/inventory_query_update_Ciena.sql";
String c = "/Construction/src/Inventory/PeportsUI/plsql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql";
System.out.println(a.replaceFirst(".*/((?:sql|plsql).*)", "$1"));
System.out.println(b.replaceFirst(".*/((?:sql|plsql).*)", "$1"));
System.out.println(c.replaceFirst(".*/((?:sql|plsql).*)", "$1"));
}
<强>输出:强>
sql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql
sql/inventory_query_update_Ciena.sql
plsql/inv_insert_crdtypedet_faultyprt_chk_typ_r3450.sql
在这里演示: