Java開發常用正則表達式處理案例總結
阿新 • • 發佈:2018-10-04
str 前言 public 正則 .com trim string com ssi [TOC]
1 前言
前一段時間幫公司開發的一套自定義表達式轉sql
語句的引擎,對於比較規範的表達式處理,大量使用到了正則表達式做匹配,所以這裏記錄一下常用的方法,因為實際上方法很多,但是這裏記錄的只是自己常用到的。
2 常用方法
2.1 案例1
這裏以下面的字符串為例:
[{EXP}, [1536206035, 1536547988]]
[{EXP}, [1536206035,)]
[{EXP}, (,1536206035]]
這裏希望用正則表達式處理的方式拿到{EXP}
後面的內容,即上面的[1536206035, 1536547988]
、[1536206035,)
或(,1536206035]
。
首先編寫正則表達式如下:
public static final String GET_EXP_DATE_RANGE = "^ *\\[ *\\{ *EXP *\\} *, *(.*) *\\]$ *"
正則處理:
Matcher matcher = Pattern.compile(DateRules.GET_EXP_DATE_RANGE).matcher(expression);
if(matcher.find()) {
String content = matcher.group(1).trim();
}
即可完成處理。
2.2 案例2
有下面的一個自定義布爾表達式:
(1 OR 3) AND 2
現在希望將數字替換為其它想要的字符串,同時也帶上原來的數字,即上面的表達式處理之後如下:
(#DELIMITED#1 OR #DELIMITED#3) AND #DELIMITED#2
處理方法如下:
baseBoolExpression = baseBoolExpression.replaceAll("(\\d+)", "#DELIMITED#$0");
可以在Scala
的交互式解析器中測試一下(Scala
的String
就是java.lang.string
):
scala> var baseBoolExpression:String = "(1 OR 3) AND 2" baseBoolExpression: String = (1 OR 3) AND 2 scala> baseBoolExpression = baseBoolExpression.replaceAll("(\\d+)", "#DELIMITED#$0"); baseBoolExpression: String = (#DELIMITED#1 OR #DELIMITED#3) AND #DELIMITED#2 scala> baseBoolExpression res68: String = (#DELIMITED#1 OR #DELIMITED#3) AND #DELIMITED#2
Java開發常用正則表達式處理案例總結