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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

作为程序员之正则表达式

發(fā)布時間:2023/12/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 作为程序员之正则表达式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 正則表達式
    • 基礎(chǔ)語法
      • 標準字符集合
      • 自定義的字符集合
      • 多行、單行模式
    • 高級語法
      • 選擇符和分組
      • 反向引用
      • 預(yù)搜索/零寬斷言
    • 例子
      • 匹配郵箱

正則表達式

基礎(chǔ)語法

標準字符集合

\D 和[^\d]意思一樣,就是與 \d 相反

REG意義
\ddigital表示 0 到 9 之間任意的一個數(shù)字
\wworld表示任意一個字母或數(shù)字或下劃線,不包含¥$%等
\sspace表示包括空格、制表符、換行符等空白字符中任意一個
.可以匹配任意一個字符

自定義的字符集合

REG意義
[ad# ]方括號表示匹配 a 或 d 或 # 或 空格
^[ad# ]表示除方括號以外的字符
[a-g]表示匹配 a 到 g 之間的字符,別和上面的混淆了
[^a-f,0-3]匹配除了 a - f 和 0 到 3以外的字符

匹配次數(shù)

REG意義
(\d){10}前面的規(guī)則重復(fù)匹配了10次
{n,m}表示至少重復(fù)n次,最多重復(fù)m次
{n,}至少n次
?同{0,1}
+同{1,}
*同{0,}

多行、單行模式

  • 忽略大小寫:ignorecase
  • 單行模式:single line 整個串作為一個模板串
  • 多行模式:multi line 模板串分為多個行

    字符邊界/匹配位置

    REG意義
    ^與字符串開始的地方匹配
    $與字符串結(jié)束的地方匹配
    \b表示在邊界處匹配字符,放在左右會不一樣的結(jié)果
  • 高級語法

    選擇符和分組

    REG意思
    \|表示‘或’的意思,匹配左邊或右邊
    ()對正則表達式分組,更好地組織匹配
    (?:Expression)不把()組中匹配到的字符不保存到group中

    反向引用

    \nnn反向引用|把捕獲的字符分組編號,左括號為一個分組

    預(yù)搜索/零寬斷言

    也是匹配位置

    很少用的

    REG意義
    (\w)(?=Expression)匹配以Expression匹配到的字符結(jié)尾的字符
    (\w)(?!Expression)匹配不能以Expression匹配到的字符結(jié)尾的字符
    (\w)(?<=Expression)位置前面可以匹配Expression
    (\w)(?<!Expression)位置后面可以Expression

    表達式 方向 說明
    |GEG|意義|
    |:----|----:|----:|
    |(?=xxx)|正向預(yù)搜索(向右) 正向預(yù)搜索,判斷當(dāng)前位置右側(cè)是否能匹配指定表達式 |
    |(?!xxx) | 正向預(yù)搜索(向右) 正向預(yù)搜索否定,判斷當(dāng)前位置右側(cè)是否不能夠匹配指定表達式 |
    |(?<=xxx)| 反向預(yù)搜索,反向預(yù)搜索,判斷當(dāng)前位置左側(cè)是否能夠匹配指定表達式|

    例子

    匹配郵箱


    要考慮的問題:

  • 把@前面的給匹配了:(\w+)
  • 匹配“.”:. (因為“.”表示任意字符,所以要轉(zhuǎn)義一下才能匹配到“.”)
  • 把@后面的域名給匹配了,要考慮多層域名的匹配
  • 用戶名和域名中的大小寫
  • 用戶名中含有 “.”
  • 并不允許用戶名中出現(xiàn)”-“
  • 第一版
    沒能匹配到用戶名中有 ”.“的郵箱
    (\w+)@(\w+)(\.[a-zA-Z]{2,5}){1,2}

    2989389@qq.com
    adfj32KddkfKJAD@163.com
    ajdf23AKDJFO@yahoo.com.cn
    akdjf239290@guet.org
    KFADJSFOAJDSFOAEJ@GUET.EDU.CN

    最終版

    ![](https://images0.cnblogs.com/blog/582013/201312/23170854-ccd9c8305e1d43e998a0240d67cdc1f2.jpg) 這個可以匹配用戶名含有“.“的郵箱

    package regex;

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class MatchMail {
    public static void main(String[] args) {

    //正則表達式Pattern p = Pattern.compile("(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w{2,3}){1,3})");//待匹配的字符串String str = "2989389@qq.com"+ "adfj32KddkfKJAD@163.com"+ "ajdf23AKDJFO@yahoo.com.cn"+ "akdjf239290@guet.org"+ "KFADJSFOAJDSFOAEJ@GUET.EDU.CN"+"23jka32ir.323dfj@qq.com"+"23rfasdf.com.@163.qq.com";//用正則表達式去匹配字符串Matcher m = p.matcher(str);int i = 0;//如果發(fā)現(xiàn),m.find()則為truewhile(m.find()){//每一組匹配到的字符都被放到了group里System.out.println(m.group(0));i++;}System.out.println(i); }

    }

    ###中文字符### **[\u4e00-\u9fa5]** ***###用正則表達式取出正則表達式中括號里的數(shù)據(jù) ![](http://images2015.cnblogs.com/blog/640685/201509/640685-20150901151130888-1768887603.png)

    package atest;

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class Aa {
    public static void main(String args[]) throws Exception {
    // 用正則表達式把字符串中的浮點數(shù)提取出來
    // "\d[.]\d" 不能處理 .t3
    // “\(.*?\)” 也是可以的
    Pattern p = Pattern.compile("[\d]+\.[\d]+");
    String u = "Mv(2.50),Tl(3.25),3.t3,3.,3..,Tr(3.26),Bk(2.16)";
    Matcher m = p.matcher(u);

    // 統(tǒng)計有多少個浮點數(shù)int i = 0;while (m.find()) {System.out.println(m.group());i++;}System.out.println(i); }

    }

    ###匹配IP地址### > 1. 匹配:三個字符一個點 三個字符一個點 三個字符一個點 三個字符 > 2. IP地址<255 > 3. IP地址的數(shù)字不能以0開始,如:012.* 第一版: ``` ((\d{1,3})\.){3}\d{1,3} ``` 把562.264.351也匹配了,沒能確定IP地址<255* 第二版(最終版) ``` (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) ``` ```/ *** 最簡潔的IP判斷正則表達式* 25[0-5] 250-255* 2[0-4]\d 200-249* [01]?\d\d? 000-199(0-9 \d)(10-99 \d\d)(100-99 1\d\d)* ($|(?!\.$)\.) 結(jié)束 或者 不以.結(jié)束的加上.* (?!^0{1,3}(\.0{1,3}){3}$) 排除 0.0.0.0 /^(?!^0{1,3}(\.0{1,3}){3}$)((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$/* (?!^255(\.255){3}$) 排除 255.255.255.255*/ ```###電話、手機號碼## > 固定電話7位數(shù),包含0開頭和”—” > 移動電話11位數(shù),以13或15開頭``` (0\d{2,3}-\d{7,9})|(1[35]\d{9}) ``` ![](http://images2015.cnblogs.com/blog/640685/201509/640685-20150901221837544-1968355426.png)

    package regex;

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class TestCode {
    public static void main(String[] args) {
    Pattern p = Pattern.compile("(0\d{2,3}-\d{7,9})|(1[35]\d{9})");
    String str = "15907877344"
    + "0774-1593849"
    + "13877477862"
    + "1555615951"
    + "6651651565151"
    + "13515a1dfa91w13"
    + "434$tfsf51asf51"
    + "8E94 WE8";
    Matcher m = p.matcher(str);
    while(m.find())
    {
    System.out.println(m.group(0));
    }
    }
    }

    ````

    所用到的工具是RegexBuddy

    轉(zhuǎn)載于:https://www.cnblogs.com/tianjintou/p/4695953.html

    總結(jié)

    以上是生活随笔為你收集整理的作为程序员之正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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