我想從下面的一個名爲'query'的文件中找到表名&列名。如何在包含單個點或句點的文件中獲取單詞?
var query = " SELECT accounts.name, SUM((COALESCE((jan_val_c),0)+ ";
query += " COALESCE((feb_val_c),0)+ COALESCE((march_val_c),0)+ COALESCE((apr_val_c),0)+ ";
query += " COALESCE((may_val_c),0)+ COALESCE((june_val_c),0)+ COALESCE((july_val_c),0)+ ";
query += " COALESCE((aug_val_c),0)+ COALESCE((sept_val_c),0)+ COALESCE((oct_val_c),0)+ ";
query += " COALESCE((nov_val_c),0)+ COALESCE((dec_val_c),0))) AS sales_plan,SUM((COALESCE((jan_actual_val_c),0)+ ";
query += " COALESCE((feb_actual_val_c),0)+ COALESCE((march_actual_val_c),0)+ COALESCE((apr_actual_val_c),0)+ ";
query += " COALESCE((may_actual_val_c),0)+ COALESCE((june_actual_val_c),0)+ COALESCE((july_actual_val_c),0)+ ";
query += " COALESCE((aug_actual_val_c),0)+ COALESCE((sept_actual_val_c),0)+ COALESCE((oct_actual_val_c),0)+ ";
query += " COALESCE((nov_actual_val_c),0)+ COALESCE((dec_actual_val_c),0))) AS Actual_plan ,month_name_c, ";
query += " cl_sales_planning_month.year_c, cl_products.volume,cl_brands.name AS brand ,cl_therapies.name ";
query += " AS therapy,cl_products.name AS product, accounts.created_by,accounts.assigned_user_id , ";
query += " DATE_FORMAT(STR_TO_DATE(CONCAT_WS('-',cl_sales_planning_month.month_name_c, ";
query += " cl_sales_planning_month.year_c),'%M-%Y'),'%b-%y') AS monthyear FROM cl_sales_planning_month ";
query += " LEFT JOIN accounts ON cl_sales_planning_month.account_id_c =accounts.id LEFT JOIN cl_products ";
query += " ON cl_sales_planning_month.cl_products_id_c = cl_products.id LEFT JOIN cl_brands ON ";
query += " cl_products.cl_brands_id_c=cl_brands.id LEFT JOIN cl_therapies ON ";
query += " cl_products.cl_therapies_id_c=cl_therapies.id WHERE ";
query += " cl_sales_planning_month.month_name_c = MONTHNAME(CURRENT_DATE - INTERVAL 2 MONTH) AND ";
query += " cl_sales_planning_month.year_c = YEAR(CURRENT_DATE - INTERVAL 2 MONTH) AND";
query += " cl_sales_planning_month.user_id_c IN ("+ params["childs"].value +") ";
query += " GROUP BY therapy,monthyear ";
query += " ORDER BY STR_TO_DATE(cl_sales_planning_month.year_c,'%Y') ASC, ";
query += " STR_TO_DATE(cl_sales_planning_month.month_name_c,'%M') ASC, Actual_plan DESC ";
爲此,我寫了一個Java程序:
package com.waprau;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Pattern;
public class SeparateTableNamesColumnNames {
public static void main(String[] args) {
File file = new File("/home/waprau/Desktop/query");
//Pattern = new Pattern("([^\\s]+(\\.(?i))$)");
try {
Scanner scanner = new Scanner(file);
scanner.useDelimiter("\\s|=|,|\\)|\\(|this.|\\].");
while(scanner.hasNext()){
if(scanner.next().matches("(?<!\\.)\\b[a-zA-Z]\\w*\\.[a-zA-Z]\\w*\\b(?!\\.)"))
System.out.println(scanner.next());;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
隨着上述程序,我能夠分離所有單詞。但我只想得到包含單個點或句點的單詞,例如accounts.name,cl_sales_planning_month.year_c,cl_products.volume,cl_brands.name,cl_therapies.name等。然而,我無法找到一個模式或任何可以從文件中分離這些單詞。
但它不工作。
這是我得到的結果:
這就是我想要的東西:
任何幫助表示讚賞。
感謝快速回復dan1111。但是,它不起作用。 – waprau 2013-03-04 14:47:26
@waprau,你也可能需要爲每個反斜槓添加雙重轉義。見Joop Eggen的答案。對不起,我知道正則表達式,但不是Java。 – 2013-03-04 15:02:05
請找到我的問題編輯雙逃脫。但仍然沒有成功。 :-( – waprau 2013-03-04 15:22:04