最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

正則表達(dá)式學(xué)習(xí)問答

 更新時(shí)間:2012年09月09日 10:07:40   作者:  
正則表達(dá)式是難學(xué)的,這不存在疑義。但是我認(rèn)為,難點(diǎn)也只在語法方面。正則表達(dá)式已經(jīng)有年頭了,它(的語法)誕生于上世紀(jì)七十年代。那是個(gè)怎樣的情景?

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

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

如果你覺得上面說的沒錯(cuò),那么學(xué)習(xí)正則表達(dá)式的難題就只剩下了選擇得當(dāng)?shù)姆椒?。我們學(xué)習(xí)編程語言時(shí),都強(qiáng)調(diào)不能只看書,要?jiǎng)邮謱懗绦颍踔磷詈玫霓k法是把書上的例子親自輸入運(yùn)行一遍,這樣才算真正學(xué)會(huì)了。但在許多人眼里,正則表達(dá)式或許算不上編程語言,所以學(xué)習(xí)是點(diǎn)到即止,甚至是滿足于從網(wǎng)絡(luò)上抄一些現(xiàn)成的表達(dá)式。所以,常見的問題之一是“有沒有什么學(xué)習(xí)的捷徑”,很不幸,答案是沒有——既然拷貝他人的代碼不能學(xué)會(huì)編程,抄閱現(xiàn)成的表達(dá)式、隨便翻幾篇文檔,當(dāng)然也學(xué)不會(huì)正則。不過也有幸運(yùn)的消息,真正學(xué)會(huì)正則表達(dá)式并不需要花太長(zhǎng)的時(shí)間。

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

如果你真正理解了這些常用功能,對(duì)它們的價(jià)值和使用有清晰的概念,那么另一個(gè)麻煩也就迎刃而解了——不同語言的正則表達(dá)式不同,如何解決?雖然不同語言中的正則表達(dá)式規(guī)定各有不同,但背后的思想是統(tǒng)一的,不同的只是表現(xiàn)形式,或者說概念的落地方式。好處在于,編程語言的文檔不會(huì)詳細(xì)講解什么是字符組,什么是多選分支,但會(huì)詳細(xì)告訴你字符組在本語言中是如何表示的,多選分支又是如何表示的(不信你可以在這些文檔中搜索character class或者alternation)。所以如果你的腦子足夠清楚,即便不確定最終的表達(dá)式如何寫,也只需要查文檔就可以解決。舉個(gè)例子,匹配空白字符的字符組\s,在Java字符串中要寫作\\s,因?yàn)閈s并不是Java字符串中的一個(gè)合法轉(zhuǎn)義序列,所以之前還必須有\(zhòng)來轉(zhuǎn)義\;在PHP中可以直接寫作\s,因?yàn)镻HP處理字符串時(shí)會(huì)把無法識(shí)別的轉(zhuǎn)義序列原封不動(dòng)地保存下去;在Unix下的某些工具中,必須寫作[[:space:]],這是Perl風(fēng)格的\s在POSIX規(guī)范中的表示法??雌饋肀容^麻煩,也僅此而已,因?yàn)槲覀冎?,這里需要用到的,就是“匹配空白字符的字符組”。

以上寫了這么多,可能有人會(huì)說:正則表達(dá)式這東西,不登大雅之堂,沒必要花那么多精力?;蛟S正是這種觀點(diǎn),形成了“不認(rèn)真學(xué)習(xí)正則表達(dá)式”思想根源。幸運(yùn)的是,這個(gè)問題其實(shí)很好想明白,因?yàn)楹芏嗍虑槎际沁@個(gè)道理。比如寫文章,我們不要求人人都是作家,但是人人都有可能在需要的時(shí)候?qū)懗鰩灼玫贸鍪值恼?jīng)文章,“不是作家”并不是“需要時(shí)寫不出正經(jīng)文章”的理由。為了能在需要的時(shí)候?qū)懗稣?jīng)文章,就必須專門抽出時(shí)間來學(xué)習(xí)和聯(lián)系寫作。正則表達(dá)式的學(xué)習(xí),其實(shí)也是這個(gè)道理。

相關(guān)文章

  • JavaScript的正則也有單行模式了

    JavaScript的正則也有單行模式了

    這篇文章主要介紹了JavaScript的正則也有單行模式了,需要的朋友可以參考下
    2017-04-04
  • 正則表達(dá)式詳解

    正則表達(dá)式詳解

    許多程序設(shè)計(jì)語言都支持利用正則表達(dá)式進(jìn)行字符串操作,正則表達(dá)式又稱正則表示法、常規(guī)表示法,下面通過本篇文章給大家分享正則表示相關(guān)內(nèi)容,有需要的朋友可以參考下
    2015-08-08
  • 正則表達(dá)式替換字符串并保留其中部分任意內(nèi)容(最新推薦)

    正則表達(dá)式替換字符串并保留其中部分任意內(nèi)容(最新推薦)

    我們都知道可以用正則表達(dá)式,即regex,來進(jìn)行字符串的匹配,替換,今天小編給大家分享如何用正則表達(dá)式替換字符串并保留其中部分任意內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2023-04-04
  • JS正則中的match與exec使用說明

    JS正則中的match與exec使用說明

    match() 方法將檢索目標(biāo)字符串,以找到一個(gè)或多個(gè)與 正則表達(dá)式regexp 匹配的文本。
    2011-08-08
  • 正則表達(dá)式教程之模式修正符使用介紹

    正則表達(dá)式教程之模式修正符使用介紹

    式修正符就是幾個(gè)字母,我們?cè)诿總€(gè)正則表達(dá)式中可以一次使用一個(gè),也可以連續(xù)使用多個(gè),每一個(gè)具一定的意義
    2012-10-10
  • 正則表達(dá)式(regex) 貪婪模式、懶惰模式使用方法

    正則表達(dá)式(regex) 貪婪模式、懶惰模式使用方法

    這篇文章主要介紹了正則表達(dá)式(regex) 貪婪模式、懶惰模式使用方法,需要的朋友可以參考下
    2015-10-10
  • Java中使用正則表達(dá)式處理文本數(shù)據(jù)

    Java中使用正則表達(dá)式處理文本數(shù)據(jù)

    正則表達(dá)式就是一個(gè)字符串,但和普通的字符串不同的是,正則表達(dá)式是對(duì)一組相似字符串的抽象。本文將給大家介紹java中使用正則表達(dá)式處理文本數(shù)據(jù)的相關(guān)的資料,感興趣的朋友一起看看吧
    2015-10-10
  • 正則表達(dá)式惰性匹配模式(?)

    正則表達(dá)式惰性匹配模式(?)

    在貪婪匹配模式一章節(jié)已經(jīng)說過人性是貪婪的,希望獲得更多的金錢、地位甚至美女,但是也有很多清心寡欲的人,只要滿足基本的生活需求就可以了,在正則表達(dá)式中也有這樣的匹配原則,下面就進(jìn)行一下介紹
    2016-12-12
  • linux下的通配符與正則表達(dá)式

    linux下的通配符與正則表達(dá)式

    正則表達(dá)式是在文件中匹配符合條件的字符串的。下面通過本文給大家介紹linux下的通配符與正則表達(dá)式,需要的的朋友參考下吧
    2017-05-05
  • asp只采集網(wǎng)站可見文本的正則

    asp只采集網(wǎng)站可見文本的正則

    它可以過慮Js 可以過濾 CSS 過濾HTML標(biāo)識(shí),只采集頁面的可見文本。
    2008-08-08

最新評(píng)論

高碑店市| 庄浪县| 克东县| 宕昌县| 洱源县| 仁怀市| 临颍县| 石林| 革吉县| 凭祥市| 濉溪县| 河北区| 昆山市| 三亚市| 灵石县| 长白| 龙海市| 柘城县| 宝兴县| 衡水市| 高淳县| 瓦房店市| 五大连池市| 浦东新区| 阿巴嘎旗| 闻喜县| 明光市| 安乡县| 鹤岗市| 武安市| 德保县| 齐齐哈尔市| 潢川县| 武山县| 精河县| 平遥县| 泗水县| 本溪市| 宁津县| 林芝县| 石城县|