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/cn.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灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP