以下正則運算式替換效果很好:
var line = "PRIMARY INDEX XPKDLRSRC_PMT_CLMPMT ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );"
println(line.replaceAll("""[UNIQUE\s]{0,1}PRIMARY INDEX [^\s]* \(""", "PRIMARY KEY ("))
它回傳:PRIMARY KEY ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );
第一組的重點[UNIQUE\s]是還要照顧以下內容
line = "UNIQUE PRIMARY INDEX XPKDLRSRC_PMT_CLMPMT ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );"
println(line.replaceAll("""[UNIQUE\s]{0,1}PRIMARY INDEX [^\s]* \(""", "PRIMARY KEY ("))
但是這個詞UNIQUE沒有被替換,我最終得到
UNIQUEPRIMARY KEY ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );
當我期待
PRIMARY KEY ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );
如何將正則運算式中的所有組替換為字串?
uj5u.com熱心網友回復:
[UNIQUE\s]表示由任何封閉字符組成的單個字符。對于您需要的,將其替換為(?:UNIQUE\s )?應該可以。
val line = "UNIQUE PRIMARY INDEX XPKDLRSRC_PMT_CLMPMT ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );"
line.replaceAll("""(?:UNIQUE\s )?PRIMARY INDEX [^\s]* \(""", "PRIMARY KEY (")
// res1: String = PRIMARY KEY ( DLRSRC_PMT_ID ,DLRSRC_PMT_CLMPMT_ID );
(?:正則運算式)表示一個非捕獲組,并在該組后面附加 a?使其成為可選匹配項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/489620.html
標籤:斯卡拉
