亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

正則表達式學習問答

2020-03-16 21:09:59
字體:
來源:轉載
供稿:網友
正則表達式是難學的,這不存在疑義。但是我認為,難點也只在語法方面。正則表達式已經有年頭了,它(的語法)誕生于上世紀七十年代。那是個怎樣的情景?
 
 

舉個簡單的例子吧,Unix下的usr、dev等名字,就是那時留傳下來的,現在已經有很多人詬病了,usr不是user,dev不是device,難學,也難記。經過這些年的飛速發展,當年的很多問題已經被包裝得美輪美奐,如今的用戶可能更習慣直接點擊“用戶目錄”、“驅動器”之類的圖標,再也不用為那些不規則的簡短名字發愁。但是不幸的是,一直以來正則表達式的語法卻沒有太多的變化,甚至后續增加的功能,也沿襲了之前的語法風格,在編程語言日漸人性化的今天,它自然顯得非常難懂了。今天的開發人員可能更習慣Regex.CharRange(‘a', ‘z')這樣的寫法,而不習慣[a-z];遇到(?![a-z])這樣的結構就更是抓瞎,除非轉為Regex.CheckRight(Regex.CharRange(‘a', ‘z'))的寫法。 

不過,換一個角度來看,兩者其實是一回事,只是表現形式不同,一個類似要訣,一個類似大白話。如果我們能在頭腦里構建出從要訣到大白話的轉換,正則表達式就簡單了許多,甚至可以說就是模塊的拼接。比如支付寶的流水號為18或26位數字,用正則表達式匹配,就是^([0-9]{18}|[0-9]{26})$,或者^[0-9]{18}([0-9]{8})?$。其中的邏輯很簡單:^用來鎖定開頭,$用來鎖定結尾,[0-9]匹配數字字符,([0-9]{18}|[0-9]{26})表示兩個并列的選項,即數字字符串長度為18位或26位,而[0-9]{18}([0-9]{8})?表示至少需要出現18位的數字字符串,在這之后可能還有一個8位的數字字符串(所以總長度是26位)。一般的正則表達式應用,就是這么簡單。 

如果你覺得上面說的沒錯,那么學習正則表達式的難題就只剩下了選擇得當的方法。我們學習編程語言時,都強調不能只看書,要動手寫程序,甚至最好的辦法是把書上的例子親自輸入運行一遍,這樣才算真正學會了。但在許多人眼里,正則表達式或許算不上編程語言,所以學習是點到即止,甚至是滿足于從網絡上抄一些現成的表達式。所以,常見的問題之一是“有沒有什么學習的捷徑”,很不幸,答案是沒有——既然拷貝他人的代碼不能學會編程,抄閱現成的表達式、隨便翻幾篇文檔,當然也學不會正則。不過也有幸運的消息,真正學會正則表達式并不需要花太長的時間。 

以我的經驗,學習正則表達式,真正要做的是深入理解常用功能:字符組、多選分支、匹配模式、環視??梢哉f,弄明白了這幾點,80%的正則問題都可以解決。但是要弄明白這幾點,就需要專門的學習:字符組是解決什么問題的,它是怎么使用的?多選分支是解決什么問題的,它是怎么使用的?應當抽一些時間專門學習、思考;這些都弄明白了,再研究解決復雜問題的表達式是怎么構成的。如果你可以每天抽1-2小時專門學習,兩周內就會有明顯收效,一個月幾乎就可以修煉到相當水平。而且,以我的經驗,在學習新的編程語言時,不但要把書上的例子都親自輸入運行一遍,更要自己動手去改一改示例代碼,看看會出現什么現象,再想想為什么會這樣。如果你在學習正則表達式時也做到這一點,必然能夠事半功倍。 

如果你真正理解了這些常用功能,對它們的價值和使用有清晰的概念,那么另一個麻煩也就迎刃而解了——不同語言的正則表達式不同,如何解決?雖然不同語言中的正則表達式規定各有不同,但背后的思想是統一的,不同的只是表現形式,或者說概念的落地方式。好處在于,編程語言的文檔不會詳細講解什么是字符組,什么是多選分支,但會詳細告訴你字符組在本語言中是如何表示的,多選分支又是如何表示的(不信你可以在這些文檔中搜索character class或者alternation)。所以如果你的腦子足夠清楚,即便不確定最終的表達式如何寫,也只需要查文檔就可以解決。舉個例子,匹配空白字符的字符組/s,在Java字符串中要寫作//s,因為/s并不是Java字符串中的一個合法轉義序列,所以之前還必須有/來轉義/;在PHP中可以直接寫作/s,因為PHP處理字符串時會把無法識別的轉義序列原封不動地保存下去;在Unix下的某些工具中,必須寫作[[:space:]],這是Perl風格的/s在POSIX規范中的表示法。看起來比較麻煩,也僅此而已,因為我們知道,這里需要用到的,就是“匹配空白字符的字符組”。 

以上寫了這么多,可能有人會說:正則表達式這東西,不登大雅之堂,沒必要花那么多精力。或許正是這種觀點,形成了“不認真學習正則表達式”思想根源。幸運的是,這個問題其實很好想明白,因為很多事情都是這個道理。比如寫文章,我們不要求人人都是作家,但是人人都有可能在需要的時候寫出幾篇拿得出手的正經文章,“不是作家”并不是“需要時寫不出正經文章”的理由。為了能在需要的時候寫出正經文章,就必須專門抽出時間來學習和聯系寫作。正則表達式的學習,其實也是這個道理。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本a级片电影一区二区| 亚洲男人天堂2019| 最近2019中文免费高清视频观看www99| 这里只有精品丝袜| 国产成人午夜视频网址| 亚洲成年网站在线观看| 亚洲激情小视频| 亚洲最大的免费| 九九综合九九综合| 岛国精品视频在线播放| 久久中文字幕国产| 4444欧美成人kkkk| 日韩免费在线电影| 久久精品国亚洲| 高清欧美性猛交xxxx| 亚洲第一区在线| 国产精品99一区| 亚洲欧洲一区二区三区久久| 日本伊人精品一区二区三区介绍| 疯狂蹂躏欧美一区二区精品| 亚洲人成电影网站色xx| 久久琪琪电影院| 久久久久久久久91| 欧美洲成人男女午夜视频| 精品国内产的精品视频在线观看| 91丨九色丨国产在线| 欧美精品一本久久男人的天堂| 日韩av电影手机在线观看| 日韩欧美精品免费在线| 亚洲欧美在线免费| 日韩经典中文字幕在线观看| 国产精品久久综合av爱欲tv| 波霸ol色综合久久| 亚洲欧美制服另类日韩| 国产精品天天狠天天看| 精品久久久久久久久国产字幕| 国产精品电影久久久久电影网| 国产精品精品国产| 亚洲精品一区中文字幕乱码| 国产精品视频网| 亚洲国产小视频在线观看| 另类色图亚洲色图| 91久久精品一区| 日韩av免费一区| 国产综合视频在线观看| 国内精品久久久久久影视8| 亚洲乱码av中文一区二区| 在线播放亚洲激情| 久久久久久久久久国产精品| 午夜美女久久久久爽久久| 国产一区二区三区在线免费观看| 亚洲人成电影在线| 亚洲精品国精品久久99热| 国产欧美精品一区二区三区介绍| 亚洲精品小视频| 亚洲精品狠狠操| 亚洲综合视频1区| 日本精品视频在线| 国产精品丝袜久久久久久高清| 欧美日韩亚洲系列| 欧美一区二粉嫩精品国产一线天| 91精品视频免费| 国产成人极品视频| 日韩在线观看视频免费| 成人免费网站在线观看| 久久夜色精品亚洲噜噜国产mv| 精品人伦一区二区三区蜜桃网站| 欧美精品成人在线| 97高清免费视频| 国产免费一区视频观看免费| 亚洲国产成人在线视频| 精品久久久久人成| 亚洲最大激情中文字幕| 亚洲丝袜一区在线| 18性欧美xxxⅹ性满足| 亚洲精品97久久| 国产成人精品一区| 亚洲国产精品一区二区久| 国产精品免费一区二区三区都可以| 热久久免费视频精品| 亚洲国产三级网| 57pao精品| 国产精品狼人色视频一区| 国产精品高潮在线| 国产精品劲爆视频| 日韩美女在线看| 欧美尤物巨大精品爽| 成人午夜小视频| 国产亚洲欧美另类中文| 成人久久一区二区| 激情成人中文字幕| 国产v综合ⅴ日韩v欧美大片| 国产精品第100页| 亚洲一区二区久久| 日韩欧美一区视频| 国产精品h在线观看| 亚洲美女av在线| 成人福利视频在线观看| 久久久久久久国产| 欧美激情免费在线| 欧美日韩一区二区免费在线观看| 国产精品网红直播| 亚洲性生活视频在线观看| 国产成人免费av| 国产精品美乳在线观看| 萌白酱国产一区二区| 精品亚洲夜色av98在线观看| 亚洲精品网站在线播放gif| 国产精品久久久久久亚洲调教| 欧美日韩国产精品一区| 另类图片亚洲另类| 久久成人18免费网站| 亚洲一区二区三区香蕉| www.欧美视频| 欧美大片大片在线播放| 亚洲精品免费网站| 亚洲在线免费视频| 日本午夜精品理论片a级appf发布| 日本成人激情视频| 久久综合免费视频影院| 精品激情国产视频| 午夜免费在线观看精品视频| 国产成人亚洲综合91精品| 欧美成人合集magnet| 国产精品中文久久久久久久| 一区二区欧美在线| 欧美大片免费观看在线观看网站推荐| 秋霞午夜一区二区| 久久久人成影片一区二区三区观看| 亚洲丝袜av一区| 日本三级韩国三级久久| 国产精品午夜一区二区欲梦| 日韩亚洲欧美中文在线| 亚洲激情 国产| 欧美激情精品久久久久| 亚洲欧美国产一本综合首页| 欧洲亚洲免费在线| 日韩精品极品视频免费观看| 精品久久久久久久久久国产| 91国内精品久久| 久久久亚洲福利精品午夜| 国产视频久久网| 91精品视频观看| 欧美一区二区三区免费观看| 亚洲福利视频二区| 国产成人鲁鲁免费视频a| 国产日韩在线精品av| 成人性生交大片免费看小说| 欧美一区二区三区免费观看| 国产日本欧美一区二区三区| 亚洲天堂av电影| 欧美一级大胆视频| 国产91精品久| 91中文字幕在线| 久久97久久97精品免视看| 国产精品91视频| 亚洲综合小说区| 成人精品久久av网站| 亚洲肉体裸体xxxx137| 久久久精品日本| 国产视频自拍一区| 亚洲成色777777在线观看影院| 国产精品久久中文| 国产精品久久久久久婷婷天堂|