首先,查詢不管是用db或index(Lucene)都可以『不分大小寫』,然後將查詢結果在顯示時用replace的方式在關鍵字的前後加上highlight,像是:
春天 -> <b>春天</b>中文關鍵字沒啥問題,麻煩在英文字highlight上,如果原文是這樣『Spring spring SPRING』,按照之前的作法就會變成『<b>spring</b> <b>spring</b> <b>spring</b>』,原文的大小寫不見了。
問題就在於『尋找』可以不分大小寫,但是『取代』只能用一種方式,就是當初指定要不分大小寫的樣子。
後來在RE找到救贖:
String inputStr = "Spring spring SPRING";
// 不分大小寫作搜尋,括號是重點
Pattern pattern = Pattern.compile("(spring)", Pattern.CASE_INSENSITIVE);
// Pattern pattern = Pattern.compile("(?i)(spring)");
Matcher matcher = pattern.matcher(inputStr);
// $0 表示第一組括號內的字串
String result = matcher.replaceAll("<b>$0</b>");
// <b>Spring</b> <b>spring</b> <b>SPRING</b>
System.out.println(result);
沒有留言:
張貼留言