[問題] 請教正則運算式的問題

看板java作者 (ꬮ....)時間13年前 (2013/01/31 00:01), 編輯推噓1(1010)
留言11則, 5人參與, 最新討論串1/1
請問版上各位高手 小弟最近在研究正則運算式 遇到一個困難 就是不知道有沒有辦法做出 "不匹配但是紀錄群組" 的結果 例如解析地址 如果判斷式為 (.*)市(.*)區(.*)路 目標字串為 "台北市信義區松智路" 會得到 group(0) = 台北市信義區松智路 group(1) = 台北 group(2) = 信義 group(3) = 松智 但如果輸入 "台北市松智路" 少了"區" 就會沒辦法匹配 如果判斷式改為 (.*)市(.*)區?(.*)路 一樣輸入 "台北市松智路" 會得到 group(0) = 台北市松智路 group(1) = 台北 group(2) = 松智 現在想問的是 有沒有辦法 就算沒有匹配到"區" 但是有用小括號group起來 就記錄為一個群組 例如 想得到的結果如下 group(0) = 台北市松智路 group(1) = 台北 group(2) = null group(3) = 松智 用Regex Tester怎麼試都試不出來 = =||| 先感謝各位高手解答! ------------------------------------------------------------ 自己再補充一下 如果正則運算式為 "(.*市)?(.*區)?(.*路)?" 可以達成目的 得到的結果如下 group(0) = 台北市松智路 group(1) = 台北市 group(2) = null group(3) = 松智路 但是要求再多一點點的時候 不要那個[市]和[路] 只要[台北]和[松智] 我就無解了... 當然parse完再用程式去拆字串也是可以 不過現在不是寫作業或是工作需求... 只是好奇有沒有辦法做到一個Pattern直接搞定 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.169.217.239

01/31 00:05, , 1F
1.RegExp 版可能更適合 2.我會直接寫程式拆 [遮臉]
01/31 00:05, 1F
mrker:轉錄至看板 RegExp 01/31 00:09

01/31 00:11, , 2F
這個需求是比較奇怪 有想過用程式拆解 但是畢竟不如正則方便
01/31 00:11, 2F
※ 編輯: mrker 來自: 1.169.217.239 (01/31 00:18)

01/31 00:26, , 3F
不能這樣寫嗎: "((.*)市)?((.*)區)?((.*)路)?" ?
01/31 00:26, 3F

01/31 00:35, , 4F
試了一下沒問題,當然 group 的 index 要改成 2,4,6 就是
01/31 00:35, 4F

01/31 00:41, , 5F
(?:(.*)市)?(?:(.*)區)?(?:(.*)路)? ,(?:)是比對但不取得
01/31 00:41, 5F

01/31 00:44, , 6F
↑ 多學了一招,3Q
01/31 00:44, 6F

01/31 00:47, , 7F
感謝樓上諸位 又學到新的比對方式 剛想了一下 更機車的case
01/31 00:47, 7F

01/31 00:49, , 8F
(?:(.*)市)?(?:(.*)道)? 台北市市民大道 會變台北市|民大道
01/31 00:49, 8F

01/31 01:06, , 9F
把第一個 (.*) 換成 ([^市]*),就不會多吃一個市
01/31 01:06, 9F

01/31 01:08, , 10F
太感謝了 正則這東西 我永遠這東西對我真是像天書一樣
01/31 01:08, 10F

01/31 01:09, , 11F
我會把第一個 (.*) 換成 (.*?) 它會盡量吃越少越好
01/31 01:09, 11F
文章代碼(AID): #1H2KFFYM (java)