日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用正则把数字前面的符号替换_正则表达式(一) 基本表达式

發(fā)布時(shí)間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用正则把数字前面的符号替换_正则表达式(一) 基本表达式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

定義

正則表達(dá)式(Regular Expression)
用某種模式去匹配一類字符串的公式,主要用來(lái)描述字符串匹配的工具。

匹配
文本或字符存在不止一個(gè)部分滿足給定的正則表達(dá)式,這是每一個(gè)這樣的部分都被稱為一個(gè)匹配。 匹配分為以下三種類型:

  • 形容詞性的匹配
    即一個(gè)字符串匹配一個(gè)正則表達(dá)式
  • 名詞性的匹配
    即在文本或字符串里匹配正則表達(dá)式
  • 名詞性的匹配
    即字符串中滿足給定的正則表達(dá)式的一部分
  • 元字符

    元字符(Metacharacter)是一類非常特殊的字符,它能夠匹配一個(gè)位置或字符集合中的一個(gè)字符,元字符可以分為兩種類型

    • 匹配位置的元字符
    • 匹配字符的元字符

    元字符只能匹配一個(gè)字符位置,也就是一個(gè)匹配的單位是一個(gè)字符,而不是一個(gè)字符串

    匹配位置的元字符

    測(cè)試

    • ^a
      匹配第一個(gè)字母為a的一行

    • a$
      匹配最后一個(gè)字母為a的一行

    • ^a$
      匹配只有一個(gè)字母a的一行

    • bStr
      匹配以Str為開頭的單詞

    • ingb
      匹配以ing為結(jié)尾的單詞

    • bStringb
      僅匹配String這個(gè)單詞

    b字符如何識(shí)別哪個(gè)是單詞呢?
    以標(biāo)點(diǎn)符號(hào)或空格分隔的字符串將被識(shí)別為單詞,而且 b只能用于英文,不能用于中文

    匹配字符的元字符

    元字符都是按照單個(gè)字符進(jìn)行匹配

    測(cè)試

    • .
      全部字符匹配

    • w
      匹配了全部的單詞字符,除了下劃線之外的標(biāo)點(diǎn)符號(hào)和漢字都被排除在外

    • W
      匹配結(jié)果和w剛好相反,注意那個(gè)下劃線是屬于單詞字符的

    • s
      有2個(gè)空格被匹配,注意!這里總共有6個(gè)符號(hào)被匹配了,除了兩個(gè)空格還有1~4行末的換行符

    • S
      除了2個(gè)空格和4個(gè)換行符,其余字符全部匹配

    • d
      匹配所有的數(shù)字

    • D
      匹配所有數(shù)字之外的字符

    元字符組合

    僅僅是元字符就可以自由組合來(lái)實(shí)現(xiàn)不同的匹配效果

    • ww
      匹配連續(xù)的兩個(gè)單詞字符

    • ws
      注意第三行最后匹配的m是和行末的換行符一起匹配成功的

    文字匹配

    字符類

    字符類是一個(gè)字符集合,如果該字符集合中的任何一個(gè)字符被匹配,則它會(huì)找到該匹配項(xiàng)。

    • []
      字符類使用中括號(hào)作為標(biāo)志,字符集合寫在中括號(hào)里面,意為匹配中括號(hào)中的任意一個(gè)字符
    • -
    • 當(dāng)-符號(hào)不是第一個(gè)字符的時(shí)候表示定義字符的范圍*,例如[1-3]表示[123],[a-z]表示匹配任意小寫字母,如果-放在第一位,那就僅表示自己,這個(gè)范圍的順序和兩個(gè)字符間的內(nèi)容是按照ASCII表的順序決定的,例如[9-1]是違反ASCII表順序的一個(gè)表達(dá)式,這會(huì)報(bào)錯(cuò)
    • ^
      如果放在字符類第一個(gè),表示該字符類的否定,[^123]表示匹配1、2、3之外的所有數(shù)字
    • 元字符在字符類中不做任何特殊處理,僅僅表示他們自身

    測(cè)試

    • [aeiou]
      匹配元音字母
    • [a-z]
      匹配從小寫字母a到z之間的所有字母
    • [^aeiou]
      匹配元音字母之外的所有字符(包括任意符號(hào))
    • [^a-z]
      匹配小寫字母a到z之間的所有字母之外的所有字符
    • [0-9]
      匹配從0到9之間的任意一個(gè)數(shù)字
    • [ao-u]
      匹配a和o到u之間的所有字母,可以看到只要在連個(gè)字符之間使用連接符-就會(huì)判斷為一個(gè)區(qū)間
    • [!-?]
      匹配從!到?之間的任意一個(gè)符號(hào),可以看到因?yàn)槭前凑誂SCII表順序來(lái)判斷-連接的字符集合,所以這樣寫也是沒有問(wèn)題的
    • [a^-]
      匹配字符a、^和-三個(gè)字符,只要^符號(hào)不在第一位,-符號(hào)不在兩個(gè)字符中間,那么它們就只表示自身
    • a[no]
      匹配字符串a(chǎn)n或ao,這是字符類和元字符的組合

    字符轉(zhuǎn)義

    之前介紹的元字符非常好用,但是這又引出了一個(gè)問(wèn)題,如果我們想在正常的表達(dá)式里面使用元字符本身這個(gè)符號(hào)怎么辦呢?難道每次都要寫在字符類里面嗎?
    當(dāng)然不,這里就引出了我們的字符轉(zhuǎn)義

    正則表達(dá)式定義了一些特殊的元字符,如^、$、.等。由于這些字符在正則表達(dá)式中被解釋成其他指定的含義,如果需要匹配這些字符,則需要使用字符轉(zhuǎn)義來(lái)解決這個(gè)問(wèn)題。轉(zhuǎn)義字符使用符號(hào)(反斜杠),它可以取消這些字符(如^、$、.等)在表達(dá)式中具有的特殊意義。

    • .
      匹配字符.
    • *
      匹配字符*

    • 匹配字符
    • www.lanyuanxiaoyao.com
      匹配字符串www.lanyuanxiaoyao.com,網(wǎng)址中的dot符號(hào)也是需要轉(zhuǎn)義的

    常用轉(zhuǎn)義字符

    限定符

    這是一個(gè)重要的知識(shí)點(diǎn)限定符用于指定允許特定字符或字符集自身重復(fù)出現(xiàn)的次數(shù)。

    測(cè)試

    • a{3}

    • a{2,}

    • a{2,3}

    • ab+

    • ab?

    • ab*

    • ab+?

    • ab??

    • ab*?

    貪婪模式與懶惰模式

    如果在限定符*、+、?、{n}、{n,}和{n,m}之后再添加一個(gè)字符 ? ,則表示 盡可能少地重復(fù)字符?之前的限定符號(hào)的重復(fù)次數(shù),這種匹配方式稱為懶惰匹配,與之相對(duì)的,如果沒有字符 ? ,僅僅使用單個(gè)限定符*、+、?、{n}、{n,}和{n,m}的匹配,就稱為貪婪匹配。 看起來(lái)好像很復(fù)雜,但是理解歷來(lái)并不難,即懶惰匹配模式只匹配最短符合表達(dá)式的字符串,貪婪匹配模式只匹配最長(zhǎng)符合表達(dá)式的字符串。這里的貪婪模式和懶惰模式在不同的教程或者說(shuō)明里面都有不同的叫法,所以可以理解意思就行了,大同小異

    測(cè)試

    • 貪婪模式 a.*b
      可以看到這里只有一個(gè)匹配,就是整個(gè)字符串,因?yàn)檫@是最長(zhǎng)的匹配

    • 懶惰模式 a.?b
      這里一旦發(fā)現(xiàn)一個(gè)匹配立刻就完成當(dāng)前的匹配,然后從下一個(gè)字符開始新的匹配,所以這里會(huì)有4個(gè)匹配

    字符的運(yùn)算

    替換

    替換使用字符|來(lái)表示,表示如果某一個(gè)字符串匹配了表達(dá)式中字符|左邊或者右邊的規(guī)則,那么這個(gè)字符串就匹配了這個(gè)表達(dá)式|表示“或”的意思,這個(gè)符號(hào)和代碼中的“邏輯或”相同,比較好理解匹配是根據(jù)左邊優(yōu)先的原則,即從左往右,當(dāng)左邊的表達(dá)式不滿足的時(shí)候,才會(huì)去嘗試右邊的表達(dá)式

    測(cè)試

    • a|b
      可以看到不管是字符a還是b都可以匹配這個(gè)表達(dá)式,它等同于[ab]

    分組

    分組又被稱為子表達(dá)式,即把一個(gè)正則表達(dá)式的全部或部分分成一個(gè)或多個(gè)組,分組使用()來(lái)表示,括號(hào)中的表達(dá)式就是一個(gè)組,一個(gè)組就是一個(gè)整體
    要注意和字符類[]區(qū)分開來(lái),[123]是表示匹配字符1或2或3,而(123)就是匹配123這個(gè)字符串

    反向引用

    組號(hào)
    當(dāng)一個(gè)正則表達(dá)式被分組之后,默認(rèn)從左到右每一個(gè)分組都會(huì)自動(dòng)被賦予一個(gè)組號(hào),以左括號(hào)(為分界從1開始自增,第一個(gè)組的組號(hào)是1,第二個(gè)組的組號(hào)是2,以此類推,在后面的表達(dá)式,使用組號(hào)的方式來(lái)引用前面的組,例如b(w)1b這個(gè)表達(dá)式中,后面的1就是對(duì)前面(w)組的引用 自定義組號(hào)
    分組不止會(huì)自動(dòng)使用數(shù)字作為組號(hào),還可以手動(dòng)命名,形式為(?<name>),(?<word>w)和(?'word'w)都是把w+匹配到的字母保存到名為word的分組,自定義命名的分組使用k<name>的方式使用 ,如b(?<word>w)k<word>b是匹配連續(xù)的相同的兩個(gè)字母的單詞 反向引用
    提供了查找重復(fù)字符組的簡(jiǎn)便方法,可以認(rèn)為是再次匹配同一個(gè)字符組的快捷指令反向引用引用的是前面的表達(dá)式匹配到的字符串,而不是前面的表達(dá)式
    例如,b(w)1b 這個(gè)表達(dá)式中的1表示的是前面w匹配到的字符,前面匹配到字母a那么1處也必須替換為字母a,而不是任意一個(gè)字母 所以這個(gè)表達(dá)式匹配的是兩個(gè)完全相同的字母 而如果是b(w)wb 則是表示兩個(gè)允許不相同的字母

    測(cè)試

    • (ab)ab就是一個(gè)整體看待,和單獨(dú)的字符串a(chǎn)b沒有區(qū)別

    • (?<word>ab)k<word>
      把a(bǔ)b這個(gè)組命名為word,然后在后面調(diào)用前面命名的這個(gè)組匹配的字符,即這個(gè)表達(dá)式相當(dāng)于(ab)ab

    • (?:a)(b)1
      前面的組被取消命名,所以自動(dòng)命名從(b)開始,所以后面的1匹配的是(b)

    • b(?=a)
      這個(gè)表達(dá)式的意思是,匹配字符b,這個(gè)字符b的后面緊跟著一個(gè)a

    • b(?!a)
      這個(gè)表達(dá)式的意思是,匹配字符b,這個(gè)字符b的后面不是a

    • (?<=a)b
      這個(gè)表達(dá)式的意思是,匹配字符b,這個(gè)字符b的前面是a

    • (?<!a)b
      這個(gè)表達(dá)式的意思是,匹配字符b,這個(gè)字符b的前面不是a

    • (?>a)b

    參考

  • 王蕾. 神奇的匹配 正則表達(dá)式求精之旅[M]. 北京:電子工業(yè)出版社, 2014.
  • 文中使用的正則表達(dá)式測(cè)試工具:正則表達(dá)式測(cè)試工具在線調(diào)試與分享-Zjmainstay
  • 文中使用的正則表達(dá)式可視化生成工具:Regulex JavaScript Regular Expression Visualizer.
  • 總結(jié)

    以上是生活随笔為你收集整理的使用正则把数字前面的符号替换_正则表达式(一) 基本表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。