使用純Java編寫正規表示式的開源庫包

banq發表於2016-07-22
regex-builder是一個圍繞java.util.regex的輕量包裝器,能夠讓你使用普通Java程式碼編寫正規表示式,而不是非透明的正則字串,這樣更具有可讀性和重用性。

匯入包即可使用:

import sgreben.regex_builder.CaptureGroup;
import sgreben.regex_builder.Expression;
import sgreben.regex_builder.Re;
<p class="indent">


以日期為案例:
正則字串是:

^(\d\d\)/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d):(\d\d)$
<p class="indent">

而java程式碼是:

Expression twoDigits = Re.sequence(Re.digit(), Re.digit());
Expression fourDigits = Re.repeat(Re.digit(), 4);
Expression slash = Re.character('/');
Expression colon = Re.character(':');
Expression space = Re.character(' ');
CaptureGroup day = Re.capture(twoDigits);
CaptureGroup month = Re.capture(twoDigits);
CaptureGroup year = Re.capture(fourDigits);
CaptureGroup hour = Re.capture(twoDigits);
CaptureGroup minute = Re.capture(twoDigits);
CaptureGroup second = Re.capture(twoDigits);
Expression dateExpression = Re.sequence(
  Re.beginLine(),
  day, slash, month, slash, year, space, // DD/MM/YYY
  hour, colon, minute, colon, second,    // HH:MM:SS
  Re.endLine(),
);
<p class="indent">

呼叫上面的程式碼:

Pattern p = Re.compile(dateExpression)
Matcher m = p.matcher("01/05/2015 12:30:22");
m.find();
assertEquals("01", m.group(day));
assertEquals("05", m.group(month));
assertEquals("2015", m.group(year));
assertEquals("12", m.group(hour));
assertEquals("30", m.group(minute));
assertEquals("22", m.group(second));
<p class="indent">



sgreben/regex-builder: Write regular expressions i

相關文章