国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

谷歌程序員把正則表達(dá)式藏了47年,新手發(fā)現(xiàn)后集體破防

0
分享至

每年Stack Overflow上有超過(guò)1200萬(wàn)個(gè)正則相關(guān)問(wèn)題,但87%的開(kāi)發(fā)者承認(rèn):他們至今靠復(fù)制粘貼活著。

這不是智商問(wèn)題。正則表達(dá)式(Regular Expression,一種文本模式匹配規(guī)則)的設(shè)計(jì)初衷就是"寫(xiě)一次,讀永遠(yuǎn)"——1970年代貝爾實(shí)驗(yàn)室的程序員Ken Thompson把它塞進(jìn)Unix工具箱時(shí),大概沒(méi)料到50年后還有人對(duì)著[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}發(fā)呆。

今天這份清單,從字符類到貪婪陷阱,每個(gè)例子都能直接丟進(jìn)生產(chǎn)環(huán)境。建議收藏,下次面試前翻一遍。

字符類:比你想的更野

方括號(hào)[]是正則的入門(mén)磚,但大多數(shù)人只用到[0-9]這種基礎(chǔ)款。

真正省事的寫(xiě)法藏在反斜杠里:\d等于[0-9],\w等于[a-zA-Z0-9_],\s匹配所有空白字符(空格、制表符、換行)。

Java玩家有個(gè)隱藏技能:[a-z&&[^aeiou]]這種"交集"語(yǔ)法能直接篩出小寫(xiě)輔音字母。其他語(yǔ)言?老老實(shí)實(shí)寫(xiě)[bcdfghjklmnpqrstvwxyz]吧。

一個(gè)實(shí)戰(zhàn)場(chǎng)景:提取駝峰命名里的每個(gè)單詞。[A-Z][a-z]+匹配"HelloWorld"會(huì)抓到"Hello"和"World"——大寫(xiě)字母開(kāi)頭,后面跟至少一個(gè)小寫(xiě)字母。加號(hào)+的意思是"前面的東西出現(xiàn)1次或更多"。

電話號(hào)碼提取更典型:[0-9]{3}-[0-9]{4}里的{3}是精確計(jì)數(shù),匹配"555-1234"這種格式。花括號(hào)是正則里最容易被忽略的量化工具,很多人只會(huì)用星號(hào)加號(hào)。

貪婪陷阱:90%的bug來(lái)源

正則引擎默認(rèn)"能吃多少吃多少"。

看這組對(duì)比:模式<.+>遇到輸入bold,會(huì)一口吞下bold——從第一個(gè)<一直匹配到最后一個(gè)>。

加個(gè)問(wèn)號(hào)?變成<.+?>,引擎立刻變乖:只匹配到第一個(gè)>就停,結(jié)果拆成和兩個(gè)獨(dú)立標(biāo)簽。

這個(gè)?叫"懶惰量詞",和前面的可選含義完全不同。正則的上下文依賴性就是這么煩人——同一個(gè)符號(hào)在不同位置功能大變。

完整量詞表建議刻進(jìn)肌肉記憶:

星號(hào)*:0次或多次(貪婪)
加號(hào)+:1次或多次(貪婪)
問(wèn)號(hào)?:0次或1次(貪婪)
{n}:精確n次
{n,}:至少n次
{n,m}:n到m次

每個(gè)后面都能跟?變懶惰模式。處理HTML、JSON、日志文件時(shí),懶惰量詞能救命——當(dāng)然,正經(jīng)解析這些格式應(yīng)該用專用庫(kù),正則只是應(yīng)急。

生產(chǎn)環(huán)境直接復(fù)制的模式

郵箱驗(yàn)證:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

這個(gè)版本覆蓋了99%的合規(guī)郵箱,但別拿它當(dāng)唯一校驗(yàn)——RFC 5322規(guī)定的合法郵箱格式復(fù)雜到能寫(xiě)本書(shū),實(shí)際注冊(cè)流程還得發(fā)驗(yàn)證郵件。

URL提?。?code>https?://[^\s]+

s?讓s變成可選,匹配http和https;[^\s]是"非空白字符"的簡(jiǎn)寫(xiě),一直抓到空格為止。

國(guó)內(nèi)手機(jī)號(hào):1[3-9]\d{9}

第二位限定3-9排除虛擬號(hào)段,\d{9}補(bǔ)足剩余9位。比網(wǎng)上流傳的各種冗長(zhǎng)版本干凈得多。

日志時(shí)間戳:\d{4}-\d{2}-\d{2}

ISO 8601基礎(chǔ)日期格式,年月日各就各位。需要兼容時(shí)間的話擴(kuò)展為\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}。

調(diào)試比寫(xiě)更重要

DevPlaybook的regex playground有個(gè)功能被低估了:實(shí)時(shí)高亮+分組可視化。

寫(xiě)復(fù)雜模式時(shí),把匹配結(jié)果按捕獲組著色,能立刻發(fā)現(xiàn)哪段邏輯在吞字符。比盯著黑底白字的測(cè)試輸出高效十倍。

另一個(gè)冷知識(shí):多數(shù)語(yǔ)言支持(?#注釋)語(yǔ)法。生產(chǎn)代碼里的正則建議寫(xiě)成

(?#協(xié)議)https?://(?#域名)[^\s]+

三個(gè)月后回來(lái)看,你會(huì)感謝自己。

最后留一道題:模式(\d)\1+能匹配什么?提示和"捕獲組"有關(guān),答案藏在大多數(shù)教程的附錄里——而附錄,恰恰是高手和新手的分水嶺。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
意大利經(jīng)濟(jì)發(fā)展部前副部長(zhǎng):建議想要與中國(guó)合作的外企都讀一讀“十五五”規(guī)劃

意大利經(jīng)濟(jì)發(fā)展部前副部長(zhǎng):建議想要與中國(guó)合作的外企都讀一讀“十五五”規(guī)劃

界面新聞
2026-03-25 15:50:08
信達(dá)證券所長(zhǎng)被曝猥褻女員工,撫摸私密處,正臉照被扒,警方介入

信達(dá)證券所長(zhǎng)被曝猥褻女員工,撫摸私密處,正臉照被扒,警方介入

180視角
2026-03-25 15:58:41
崩潰,市級(jí)城投集團(tuán):全員薪資腰斬后還發(fā)不出工資!

崩潰,市級(jí)城投集團(tuán):全員薪資腰斬后還發(fā)不出工資!

黯泉
2026-03-25 21:19:18
中國(guó)銀行、建設(shè)銀行、民生銀行、工商銀行,發(fā)布風(fēng)險(xiǎn)提示

中國(guó)銀行、建設(shè)銀行、民生銀行、工商銀行,發(fā)布風(fēng)險(xiǎn)提示

南方都市報(bào)
2026-03-25 10:02:16
是否有中國(guó)船只順利通過(guò)霍爾木茲海峽?外交部回應(yīng)

是否有中國(guó)船只順利通過(guò)霍爾木茲海峽?外交部回應(yīng)

財(cái)聯(lián)社
2026-03-25 15:46:15
笑掉大牙!伊朗高層當(dāng)眾互撕,吹破天的強(qiáng)硬,連軍餉都發(fā)不出來(lái)

笑掉大牙!伊朗高層當(dāng)眾互撕,吹破天的強(qiáng)硬,連軍餉都發(fā)不出來(lái)

老馬拉車莫少裝
2026-03-25 19:39:00
4月1日醫(yī)保7號(hào)令落地!1965-1985年出生的,這6件事務(wù)必抓緊辦

4月1日醫(yī)保7號(hào)令落地!1965-1985年出生的,這6件事務(wù)必抓緊辦

混沌錄
2026-03-25 15:50:11
張雪峰去世真相!網(wǎng)友:偌大的公司靠他個(gè)人ip養(yǎng)活,早死是必然的

張雪峰去世真相!網(wǎng)友:偌大的公司靠他個(gè)人ip養(yǎng)活,早死是必然的

火山詩(shī)話
2026-03-25 09:18:58
特朗普:臺(tái)灣屬于中國(guó),武統(tǒng)是中方的自由,但一動(dòng)手美國(guó)會(huì)不高興

特朗普:臺(tái)灣屬于中國(guó),武統(tǒng)是中方的自由,但一動(dòng)手美國(guó)會(huì)不高興

共工之錨
2026-03-22 00:48:09
75歲劉曉慶發(fā)文:這么想我死啊

75歲劉曉慶發(fā)文:這么想我死啊

都市快報(bào)橙柿互動(dòng)
2026-03-25 15:21:36
“霍爾木茲決戰(zhàn)”,不打了

“霍爾木茲決戰(zhàn)”,不打了

中國(guó)新聞周刊
2026-03-25 18:43:08
譚瑞松,被判死緩

譚瑞松,被判死緩

新京報(bào)政事兒
2026-03-25 17:17:03
傳張雪峰二婚妻子清純甜美:去年已生子,11歲女兒遺傳繼承恐生變

傳張雪峰二婚妻子清純甜美:去年已生子,11歲女兒遺傳繼承恐生變

博士觀察
2026-03-25 21:33:04
原來(lái)如此!張雪峰去世當(dāng)天吃午飯和搶救畫(huà)面流出!更多細(xì)節(jié)曝光

原來(lái)如此!張雪峰去世當(dāng)天吃午飯和搶救畫(huà)面流出!更多細(xì)節(jié)曝光

霹靂炮
2026-03-25 21:35:07
1000億背后的陽(yáng)謀:拼多多利用中國(guó)制造的優(yōu)勢(shì),要狂掃國(guó)外市場(chǎng)

1000億背后的陽(yáng)謀:拼多多利用中國(guó)制造的優(yōu)勢(shì),要狂掃國(guó)外市場(chǎng)

風(fēng)向觀察
2026-03-25 20:46:14
退役體操冠軍,直播“擦邊”之后

退役體操冠軍,直播“擦邊”之后

中國(guó)新聞周刊
2026-03-25 21:34:08
臺(tái)獨(dú)大金主身中29槍暴斃

臺(tái)獨(dú)大金主身中29槍暴斃

雪中風(fēng)車
2026-03-24 20:19:46
實(shí)錘了,日媒爆料六本木高級(jí)陪酒女廣州運(yùn)毒被捕,日本網(wǎng)友這樣說(shuō)

實(shí)錘了,日媒爆料六本木高級(jí)陪酒女廣州運(yùn)毒被捕,日本網(wǎng)友這樣說(shuō)

日本物語(yǔ)
2026-03-25 20:56:54
堅(jiān)決反對(duì)中國(guó)任何城市申辦奧運(yùn)會(huì),國(guó)際奧委會(huì)這次怕是真失算了

堅(jiān)決反對(duì)中國(guó)任何城市申辦奧運(yùn)會(huì),國(guó)際奧委會(huì)這次怕是真失算了

南權(quán)先生
2026-03-25 15:25:11
首次全流程展示!國(guó)產(chǎn)無(wú)人機(jī)蜂群作戰(zhàn)系統(tǒng)震撼亮相

首次全流程展示!國(guó)產(chǎn)無(wú)人機(jī)蜂群作戰(zhàn)系統(tǒng)震撼亮相

環(huán)球網(wǎng)資訊
2026-03-25 14:26:17
2026-03-26 01:43:00
野生運(yùn)營(yíng)
野生運(yùn)營(yíng)
懂點(diǎn)產(chǎn)品,懂點(diǎn)AI,正在努力給平淡日子搞點(diǎn)新花樣。
36文章數(shù) 0關(guān)注度
往期回顧 全部

科技要聞

紅極一時(shí)卻草草收?qǐng)?,Sora宣布正式關(guān)停

頭條要聞

伊朗:正在搜捕逃亡美軍

頭條要聞

伊朗:正在搜捕逃亡美軍

體育要聞

35歲替補(bǔ)門(mén)將,憑什么入選英格蘭隊(duì)?

娛樂(lè)要聞

張雪峰遺產(chǎn)分割復(fù)雜!是否立遺囑成關(guān)鍵

財(cái)經(jīng)要聞

管濤:中東局勢(shì)如何影響人民幣匯率走勢(shì)?

汽車要聞

智己LS8放大招 30萬(wàn)內(nèi)8系旗艦+全線控底盤(pán)秀實(shí)力

態(tài)度原創(chuàng)

本地
藝術(shù)
數(shù)碼
時(shí)尚
公開(kāi)課

本地新聞

來(lái)永泰同安 赴一場(chǎng)春天的約會(huì)

藝術(shù)要聞

張雪峰走了,他公司所在的這棟樓高177.8米,耗資超10億!

數(shù)碼要聞

蘋(píng)果macOS 26.4新增“慢速充電器”提示

女人過(guò)了40歲別胡亂穿衣,趕緊看看這些日系穿搭,舒適又耐看

公開(kāi)課

李玫瑾:為什么性格比能力更重要?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版