2016-11-30 66 views
1

我有一個聲明如下正則表達式來否定一個角色

#sv_q = " INSERT INTO alertuser.REALTIME 

我試圖創建一個正則表達式匹配由一組從文件線,這條線只要使用插入關鍵字。但是由於開頭使用了'#',我不想考慮這一行。如何實現這一點。我嘗試了下面的正則表達式,但這條線仍在考慮之中,任何人都可以提出如何實現這個目標?

static Pattern tracePattern = Pattern.compile("(?!\\#).*insert\\s*into",Pattern.CASE_INSENSITIVE); 
Matcher localMatcher = tracePattern.matcher(line); 
if (localMatcher.find()) { 
    // doing some checks 
} 
+0

使用'Matcher#matches()'的正則表達式。 –

+0

它有幫助嗎?請分享您的代碼。 –

+0

static Pattern tracePattern = Pattern.compile(「(?<!\\#)。*」插入\\ s *到「,Pattern.CASE_INSENSITIVE); Matcher localMatcher = tracePattern.matcher((line)); if(localMatcher.find()) {執行一些檢查} – Arjun

回答

1

如果你想使用.find(),則需要開頭的模式與^\A。此外,你最好使用單詞邊界僅全字匹配insertinto,並使用\s+,而不是\s*執行insertinto之間至少出現一個空白的:

"^(?!#).*\\binsert\\s+into\\b" 

你可以縮短你的解決方案到

if (s.matches("(?i)(?!#).*\\binsert\\s+into\\b.*")) { doing some checks} 

matches()方法需要一個完整的字符串匹配,因此,你需要在末尾添加.*。另外,Pattern.CASE_INSENSITIVE選項可以在嵌入標誌選項(?i)的幫助下內聯使用。如果您的輸入可以包含換行符,請使用(?si)而不是(?i)

+0

使用此模式時,應該被選中的記錄沒有被選中。 – Arjun

+0

「選擇」是什麼意思?正則表達式或者匹配一個字符串。 –

+0

是的..正則表達式不匹配字符串。 – Arjun