abc -> 比對abc字串
^abc -> 比對以abc開頭的字串
abc$ -> 比對以abc結尾的字串
[abc] -> 比對abc任一文字
[0-9] -> 比對任一數字
[a-z] -> 比對任一小寫英文字
[^abc] -> 比對不含abc的字串
. -> 任一字元(不含空白)
\ -> 跳脫特殊字元
\t -> TAB
\r -> 返回鍵(enter)
\n -> 換行
\f -> 換頁
\d -> 等價於[0-9]
\D -> 等價於[^0-9]
\w -> 等價於[a-zA-Z0-9_]
\W -> 等價於[^a-zA-Z0-9_]
\s -> 等價於[\r\t\n\f]
() -> 將括弧內的比對結果存入變數
[] -> 比對中括弧內的任一字元
* -> 比對前一字元任意次數
+ -> 比對前一字元1次以上
? -> 比對前一字元0或1次
{n} -> 比對前一字元n次
{n,} -> 比對前一字元n次以上
{n,m} -> 比對前一字元n次以上, m次以下
(?:abc|cde) -> 比對abc或cde但不記在變數
(?=abc) -> 比對以abc結尾的字串但不記在變數
(?!abc) -> 比對不以abc結尾的字串但不記在變數
\x -> 取出變數x的比對字串, x為>1的正整數
ab.*d -> 比對'abcd', 'abccccd', 'abcdcccdcd' (盡可能的最大化比對)
ab.*?d -> 比對'abcd', 'abccccd', 'abcd'cccdcd (比對到最近的一個符合)
- 請開啟eclipse並以maven import softleader-training-regex專案
- 透過以()將表達式的部分結果放入變數, 來輕易地做到替換, 擷取等動作
- https://regex101.com/
- 在resources底下有一個純文字檔, 裡面是Harvard的產品編號
- 已知Harvard的卡片產品編號方式是
[卡別(A,B,C,D,E,M)<0~1碼>][西元年末兩位<2碼>]+[月份(1~9,o,n,d)<1碼>]+[流水號<4碼>]+[批號(B-Z-AA-ZZ)<0~2碼>]
例:16n0127B
,1720202B
,1720202C
,1720202D
,A16n0126B
,M16n0126C
,M16n0126AA
,M16n0126AB
- 請根據上述規則實作
tw.com.softleader.sample.havard.CardParser
- 挑出不合規則的產品編號
- 將產品編號轉為
tw.com.softleader.sample.havard.model.Product
- 情境:為了富邦的上傳400, Rhys開了
XTF01
~XTF20
的Table, Dao都寫完了, 才發現泛型忘了加 - 請將
tw.com.softleader.sample.as400
這個package下所有XTFxxDao
的繼承加上泛型
- 核心底層針對規則引擎做了一個優化: 呼叫formula
- 其底層的實現就是先以regex將函式擷取運算出結果後替換回去
- 已知函式規則如下, 請擷取出
函式名稱
+參數
以
#
開頭, 函式名稱為純英數
(不限字數), 參數用[``]
包含, 有多個參數的情況下以,
分隔, 允許空白, 函式內不會
呼叫其他函式
- 請實作出可以將函式擷取出來的regex
題目位於resources下的rule+formula.txt
建議直接利用regex101作答
- 若已完成, 請思考該如何做到允許函式內呼叫函式(ps.純regex可能無法做到)