java 板


LINE

藉這個標題回一下,關於regular expression,應該是先理解其本身的基本觀念, 接著再延伸到各個程式語言對regular expression的應用與變形,例如Java、JavaScript 所以一開始對regular expression的理解會是這樣: [0123456789] [9876543210] [0-9] \d (1|2|3|4|5|6|7|8|9) 以上五種寫法都是表達同一種意思,即任一個數字字元。 那麼為何[0-9]可以,[9-0]就不可以呢? 因為若是採用[0-9]這種含有範圍字元的寫法,範圍字元左右兩邊,對應的ascii code 必須是小跟大;0的ascii code是48,9的ascii code是57,所以必須寫成[0-9]才行。 也就是說,大原則上regular expression底層是會被轉換成ascii code來執行。 或是這樣理解: /d/D /s/S /w/W .(加上空白字元) 以上四種寫法也都是一樣意思,表示任何一個字元;而 [0-9A-Za-z_]包含所有英數字元,也就是上面四種寫法減去部分特殊字元。 以上都是表達單一字元,若要表達多個字元,比方說4個數字字元。寫法可以是: [0-9][0-9][0-9][0-9] [0-9]{4} \d\d\d\d \d{4} 甚至是(1|2|3|4|5|6|7|8|9)重複寫4次。 可以看到不同語法的組合,可以產生很多種寫法。 而一個/一串字元,至少出現0次、至少出現1次、0或1次也都有對應的寫法:*、+、?。 另外還有否定意思的寫法:^;[^a]就是非a;[^ab]就是第一個字元非a,或是非b。 而[a^b]和[\^ab]都是一樣的意思,都是a、^、b三個字元任一即可。 ------------------------------------------------------------ 以上是regular expression最基本的觀念與原則。而Java的regular expression, 採用的是ascii編碼,正好和上面講到的原則,底層由ascii code執行一樣。 也就是說上面提到的[0-9]寫法,在Java是可以的,但[9-0]這種寫法就不行了。 另一個Java常見的regular expression狀況,是必須將\d \D \s \S \w \W這些寫法, 改成改成\\d \\D \\s \\S \\w \\W。原因是避免Java在執行時,誤以為 \d \D \s \S \w \W是跟\n \t一樣類型的字元,或者是說避免\被Java當作跳脫字元。 所以\才要寫成\\。 那這樣的話,若是要在Java,表達單純一個\這樣的字元,該如何表示? 先嘗試寫出\的regular expression, 單純一個\,會跟\d \D的\搞混,所以要改寫成\\;\\就是regular expression 表達一個\的寫法。然後\\這個寫法要寫在Java程式上; 前面說過,Java看到一個\,就會當成是一個跳脫字元,那現在有兩個\, Java就會認為是兩個跳脫字元,這樣的話就要加上兩次\,避免兩個\都被當成跳脫字元, 就變成\\\\。 ------------------------------------------- 以上是根據https://www.tenlong.com.tw/products/9789865005047 這本書來簡單分享,有錯的話希望不要編得太大力= =。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.22.152 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1683552503.A.B1F.html
1F:→ ssccg: 後那段「Java的寫法」其實是Java literal string的寫法 05/09 08:14
2F:→ ssccg: 在literal string裡需要escape \,實際的string物件裡就跟 05/09 08:16
3F:→ ssccg: 原本的regex是一樣的,如果是用別的方式輸入例如檔案就不需 05/09 08:17
4F:→ ssccg: 要\\ 05/09 08:17
5F:推 EijiHoba: 謝謝分享 08/10 08:50







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP