正則表達式的元字符和轉義字符,又及轉義字符和ASCII碼之間的關係小解

一、正則表達式的組合javascript

正則表達式由元字符和轉義字符組成

元字符有php

  • ^ :斷言目標的開始位置(或多行模式下的行首位置)
  • $ :斷言目標的介紹位置(或多行模式下的結尾位置)
  • . :匹配除換行符外的其餘任何字符
  • [ :匹配字符類定義
  • ] :介紹內字符定義
  • | :開始一個可選分支
  • ( :子組的開始標記
  • ) :子組的結束標記
  • ? :做爲量詞表示0次或屢次,若位於量詞以後則是用於改變量詞的貪婪特性
  • * :量詞0次或屢次匹配
  • + :量詞1次或屢次匹配
  • { :自定義量詞的開始標記
  • } :自定義量詞的結束標記

轉義字符有java

  • \f正則表達式

    換頁(FF),將當前位置移到下頁開頭
    十進制碼是:012,八進制碼是:\014,十六進制是:\x0e
  • \nsql

    換行(LF) ,將當前位置移到下一行開頭
    十進制碼是:010,八進制碼是:\012,十六進制是:\x0c
  • \r編程

    回車(CR) ,將當前位置移到本行開頭
    十進制碼是:013,八進制碼是:\015,十六進制是:\x0d
  • \toracle

    水平製表(HT) (跳到下一個TAB位置)
    十進制碼是:009,八進制碼是:\011,十六進制是:\x09
  • \\編程語言

    表明一個反斜線字符'\'
    十進制碼是:092,八進制碼是:\134,....
  • \'sqlserver

    表明一個單引號(撇號)字符
    十進制碼是:039,八進制碼是:\047
  • \"編碼

    表明一個雙引號字符
    十進制碼是:034,八進制碼是:\042
  • \?

    表明一個問號
    十進制碼是:063,八進制碼是:\077
  • \0

    空字符(NUL)
    十進制碼是:000,八進制碼是:\000
說到了轉義字符,如今解釋一下轉義字符和ASCII之間的關係:

二、ASCII碼
咱們知道,計算機內部,全部信息最終都是一個二進制值。每個二進制位(bit)有0和1兩種狀態,所以八個二進制位就能夠組合出256種狀態,這被稱爲一個字節(byte)。也就是說,一個字節一共能夠用來表示256種不一樣的狀態,每個狀態對應一個符號,就是256個符號,從00000000到11111111。
上個世紀60年代,美國製定了一套字符編碼,對英語字符與二進制位之間的關係,作了統一規定。這被稱爲 ASCII 碼,一直沿用至今。
ASCII 碼一共規定了128個字符的編碼,好比空格SPACE是32(二進制00100000),大寫的字母A是65(二進制01000001)。這128個符號(包括32個不能打印出來的控制符號),只佔用了一個字節的後面7位,最前面的一位統一規定爲0。
\x表示後面的字符是十六進制數,\0表示後面的字符是八進制數。
全部的ASCII碼均可以用「」加數字(通常是8進制數字)來表示。而C中定義了一些字母前加""來表示常見的那些不能顯示的ASCII字符,如0,t,n等部分特殊字符,就稱爲轉義字符,由於後面的字符,都不是八進制數字了,因此也就不是ASCII字符意思了,算定義的一些特殊字符來表示吧。

經常使用的ASCII碼

  • a-z : 十進制碼是97-122,八進制碼是141-172,"\141" === "a" && "\141" === "\a" ->true
  • A-Z : 十進制碼是65-90,八進制碼是101-132, "\101" === "A" && "\101" === "\A" -> true
  • 0-9 : 十進制是48-57,八進制碼是060-071,"\060" === "0" && "\060" === "\0" ->true
  • 不經常使用的ASCII碼,在上面正則組成部分中有寫。
如今解釋ASCII和正則匹配中的轉義字符之間的關係:

其實ASCII中的轉義字符和正則中的轉義字符是同同樣東西,都是特殊意義的字符,也算對ASCII中一些特殊字 符或不能顯示的字符的定義或別稱。由於ASCII的應用場景能夠是任何地方,因此轉義字符也能夠用於正則匹配中,甚至能夠將對轉義字符或匹配規則中非元字符的字符用八進制或十六進制的編碼轉換後用於正則匹配中,哈哈

例子:
/\141/.test("acdf"); ->true 匹配"a"
/\134/.test("a\\f"); ->true 匹配"\"
/[\141-z]/.test("a141"); ->true 匹配a-z中的任意一個字符
/b\077/.test("a"); ->true 匹配是否有b或沒有字符 "\077" === "?" ->true

其實當字符串進行大小比較時,也是比較的首字母的ASCII大小
"a" > "A" ->true 至關於 97 > 65 也至關於 "\141" > "\101" 也至關於 "\x61" > "\x41"
"a" > "'" ->true 至關於 97 > 39 也至關於 "\141" > "\047"
等等其餘匹配
最後在講講其餘具體編程語言中轉義字符串

具體編程語言中有一些特殊標誌字符,會當成編程語言中的標誌符號來識別,因此須要轉義字符來識別,例如:如HTML轉義符、java 轉義符、xml 轉義符、 oracle 轉義符、sql 轉義符 、sqlserver 轉義符、php 轉義符、asp 轉義符、vb轉義符、 javascript 轉義符等等,還有網址中的百分號。做用環境固然是對應的編程語言中。

轉義字符串(Escape String),即字符實體(Character Entity)分紅三部分:第一部分是一個&符號,英文叫ampersand第二部分是實體(Entity)名字或者是#加上實體(Entity)編號第三部分是一個分號

例如 HTML中的 > < © & " 空格 -> &gt;&lt;&copy;&amp;&quot;&nbsp; 
例如url中的 空格,?,+,\,&.... -> (十六進制的)%20 %3F %2B %5C %26固然也能夠用第二塊的ASCII中八進制或十六進制碼 
encodeURIComponent(" ")-> %20
encodeURIComponent("?")-> %3F
encodeURIComponent("\077")-> %3F
....
decodeURIComponent("%3F")-> "?"
decodeURIComponent("\077")-> "?"
decodeURIComponent("%5C")-> "\"
decodeURIComponent("\134")-> "\"
此處想說ASCII碼真的是隨處可用

詳細可參考HTML轉義字符對照表

總結: 1:將普通字符轉爲特殊用途,通常是針對全部編程語言中,用於表示不能直接顯示的字符,好比後退鍵,回車鍵,等。 2:用來將特殊意義的字符轉換回它原來的意義。通常用具體的編程語言環境中。例如HTML轉義符、php 轉義符、xml 轉義符,java轉義符,或正則表達式中。
相關文章
相關標籤/搜索