騰訊阿里百度等各大公司關於正則表達式的題目及答案(附常見年齡網址金額匹配)

1.使用正則表達式匹配一個IPv4地址

\d+.\d+.\d+.\d+ 

2.關於正則表達式,下列說法正確的是:

\w用來匹配數字
/a?/表示匹配0到多個a
i修飾符表示忽略大小寫
#1表示對第一個捕獲組的引用

解析:w匹配字母數字或下劃線;?匹配0個或1個;\1表示對第一個捕獲組的引用;所以選C 

3.簡單描述一下正則表達式及其用途

正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。模式匹配。有兩個核心組件:1. 待匹配字符串;2. 匹配模式字符串。通過後者對前者進行匹配,並將匹配到的內容返回(捕獲)

4.正則表達式A*B可以匹配

A*B 表示對字符 A 匹配 0 次或多次。
 其他兩個同類的用於表示重複匹配的字符爲 + ?
A+B 表示對字符 A 匹配1次或多次。
A?B 表示對字符 A 匹配 0 次或1次。

5.正則表達式中,+代表什麼意思()

匹配0個或多個的數量限定符

匹配1個或多個的數量限定符
擴展(的含義,也是0或1數量限定符,以及數量限定符最小值
匹配除了換行符外的任意一個字符(默認情況下)

 A、匹配0次或多次 -> *
B、匹配一次或多次 -> +(正確選項)
C、擴展 -> (?...) 不知道是不是,Python是
D、匹配除了換行符以外的任意字符-> .(句點) 

6.驗證郵箱地址的正則表達式

1. "^\\w+(-|.\\w+)*@[A-Za-z0-9]+(-|\\.[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$"
2./[0-9a-zA-Z]+@[0-9a-zA-Z]+(\.[a-zA-Z]+)+/ 

7.正則表達式(01|10|1001|0110)*與下列哪個表達式一樣?

(0|1)*    B(01|01)* C (01|10)* D(11|01)*

   E (01|1)*
(a|b)* | 爲條件匹配,* 表示匹配 0 次或多次。因此整個表達式表示:每次取 a 或 b,取 0 次或多次。因此 a, b, ab, aabb, abab 都符合要求

理解了這兩個符號,回到題目來
A 注意題目說的是一樣,而 (0|1)* 是題目表達式的父集,舉個栗子,(0|1)* 可以匹配 000000,但題目說的表達式不行
B 題幹可以匹配 1001,(01|01)* 明顯不行
C 題乾的 1001|0110 可以由 (01|10)* 組合而來,二者是等價的
D, E 和 B 同理

8.寫出一個只匹配英文和數字並只能是英文開頭的正則表達式

/^[A-Za-z][A-Za-z0-9]*$/

9.(1)爲String類定義和實現一個簡單的正則表達式模式匹配功能函數。

(2)修改取自(1)的模式匹配功能函數,使之能對標準庫string使用。請注意,你不能修改string的定義。

10.要求匹配以下16進制顏色值,正則表達式可以爲:

在這裏插入圖片描述

十六進制顏色值滿足某些條件可以簡寫。
    color: #FF33AA;
    上述顏色值可以進行簡寫,因爲每兩位都是重複的,完全可以省略掉一半。
    color: #f3a;
    上面是十六進制顏色值推薦簡寫方式。
    所以一共有6位或者3位。
    而顏色的表達可以用大寫字母或者小寫字母或者數字表示。所以是A-Z,a-z,0-9。符合題意的只有B。

11.關於身份證號,以下正確的正則表達式爲( )

在這裏插入圖片描述

正確選項
A選項:isIDCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/
C選項:isIDCard=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/
^:起始符號,^x表示以x開頭
$:結束符號,x$表示以x結尾
[n-m]:表示從n到m的數字
\d:表示數字,等同於[0-9]
X{m}:表示由m個X字符構成,\d{4}表示4位數字

15位身份證的構成:六位出生地區碼+六位出身日期碼+三位順序碼
18位身份證的構成:六位出生地區碼+八位出生日期碼+三位順序碼+一位校驗碼

C選項的構成:
[1-9]\d{5}:六位出生地區碼,出生地區碼沒有以0開頭,因此第一位爲[1-9][1-9]\d{3}:八位出生日期碼的四位年份,同樣年份沒有以0開頭。
((0\d)|(1[0-2])):八位出生日期碼的兩位月份,| 表示或者,月份的形式爲0\d或者是10、11、12。
(([0|1|2]\d)|3[0-1]):八位出生日期碼的兩位日期,日期由01至31。
\d{4}:三位順序碼+一位校驗碼,共四位。
A選項的構成:
[1-9]\d{7}:六位出生地區碼+兩位出生日期碼的年份,這裏的年份指後兩位,因此沒有第一位不能爲0的限制,所以合併了。
後面的與C選項類似了。
身份證還有15位的。

12.編寫一段正則表達式,用於匹配身份證號碼。(注:不能使用本地IDE)

^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9X]$

    地區碼: [1-9]\d{5}
    年份(1800年~3999年): (18|19|([23]\d))\d{2}
    月份:(0[1-9])|10|11|12
    天數: ([0-2][1-9])|10|20|30|31
    順序碼: \d{3}
    校驗碼: [0-9X] 

13.匹配各種

電話號碼

如:010-87892349

"\\d{3,4}-\\d{7,8}"

手機號碼(11位)

"[1][3-9]\\d{9}"

用戶名(字母開頭,數字字母下劃線組合)

"[a-zA-Z]+[\\w|_]*"

IP地址

"\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}"

網址

"http://\\w+.\\w+.\\s*"

年齡(100內)

"\\d{1,3}"

金額(有小數位)

"\\d+.\\d+"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章