1. 程式人生 > >Java開發常用正則表達式處理案例總結

Java開發常用正則表達式處理案例總結

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的交互式解析器中測試一下(ScalaString就是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開發常用正則表達式處理案例總結