找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

搜索
查看: 483|回复: 1

[分享] 正则匹配类笔记

[复制链接]
  • TA的每日心情
    奋斗
    前天 20:45
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

    35

    主题

    143

    回帖

    1206

    积分

    金牌会员

    积分
    1206
    来自: 菲律宾
    发表于 2024-1-25 00:58:49 | 显示全部楼层 |阅读模式 来自: 菲律宾
    非业余 - aardio 编程语言 - 非官方问答社区
    限时85折!暑假期间,用aardio培训班充实自己!https://mp.weixin.qq.com/s/c4Z8sZPOiMh_OTG2VPOJmA
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    正则匹配

    2023年11月12日0:32

    1、今天是2023年11月11日双十一节,\d{4}\年\d{2}\月\d{2}日  得到:2023年11月11日

    2、转换时间格式为yyyy-mm-dd:
    1. io.open();//打开控制台

    2. var str = /*
    3. 2000-3-03
    4. 2001-10-1
    5. 2001-2-2
    6. */              
    7. str=string.replace(str,"-(\d)!<\D>","-0\1",)
    8. io.print(str );

    9. execute("pause") //按任意键继续
    10. io.close();//关闭控制台
    复制代码

    3、提取数字;
    1. io.open();//打开控制台
    2.         
    3. text=/*
    4. 使用777777可以第一时间收5555786到“提问有新5687987回答”“回答被采纳”“网友求助”的通6598546
    5. 您想在自己的网站上展示百度“知道”上的5264859问答吗?来吧! 如要投诉或提5985468出意见建议。
    6. */
    7.         
    8. for m in string.gmatch( text,"\d+") {
    9.      io.print(m)
    10. }
    11. execute("pause") //按任意键继续
    12. io.close();//关闭控制台
    复制代码

    4、换行了都能匹配:
    1. import console;
    2. import web.mshtml

    3. var html = /*
    4. <img src="afds123
    5. fdgd.jpg"

    6. />
    7. <div>
    8.         <img src=
    9.         "aaabbbccc.jpg"
    10.         
    11.         />
    12. </div>

    13. */

    14. var mshtm = web.mshtml();
    15. mshtm.write( html )

    16. for i,img in mshtm.eachAll("img") {
    17.         console.log(i, img.src )
    18. }

    19. console.pause(true);
    复制代码

    5、多种格式的数据一次性匹配出来
    1. import console;
    2. io.open();//打开控制台

    3. str = /*
    4. <a href='maxred.aspx?ID=56869657' target="_blank">稿件1309753</a>
    5. <td align="center" valign="middle" style="width:50px;"></td>
    6. <td align="left" valign="middle" style="width:60px;">
    7. <div class="per_y">0%</div></td>
    8. <td align="center" valign="middle" style="width:60px;">
    9. 26.1%</td>
    10. <td align="center" valign="middle" style="width:60px;">
    11. 31.5%</td>
    12. #-------------------------------------------------------------------------
    13. <a href='maxred.aspx?ID=56869657' target="_blank">稿件1209751</a>
    14. <td align="center" valign="middle" style="width:50px;"></td>
    15. <td align="left" valign="middle" style="width:60px;">
    16. <div class="per_y">12.3%</div></td>
    17. <td align="center" valign="middle" style="width:60px;">
    18. 56.1%</td>
    19. <td align="center" valign="middle" style="width:60px;">
    20. 63.2%</td>
    21. */

    22. for m, m1 in string.gmatch(str, '\\<a.+?稿件([^\\<]+).+?<@per_y">@>(.+?)\\<.+?')
    23.     io.print(m, m1)

    24. console.pause(true);
    复制代码

    6、提取二维数组;
    1. import win.ui;
    2. /*DSG{{*/
    3. var winform = ..win.form(text="aardio Form";right=599;bottom=399;parent=...)
    4. winform.add(
    5. button={cls="button";text="提数组";left=445;top=318;right=551;bottom=353;z=2};
    6. edit={cls="edit";left=17;top=26;right=394;bottom=223;edge=1;multiline=1;z=1}
    7. )
    8. /*}}*/

    9. func = function(str) begin
    10.         var ret = {};
    11.         for m in string.gmatch(str,"start,(.+?)end;") {
    12.                 var t = {}
    13.                 for m2 in string.gmatch(m,"\:(.+?)\,") {
    14.                         table.push(t, m2)
    15.                 }
    16.                 table.push(ret, t)
    17.         }
    18.         
    19.         return ret;
    20. end;

    21. lineShow = function(line) begin
    22.         winform.edit.text += (line + '\r\n')
    23. end;

    24. winform.button.oncommand = function(id,event){
    25.         var str = 'start,1:aaaa,2:bbbb,3:cccc,4:dddd,end;start,1:eeee,2:ffff,3:gggg,4:hhhh,end;'
    26.         lineShow('解析前:\r\n' + str)
    27.         
    28.         lineShow("解析后:")
    29.         var array = func(str)        
    30.         for(i=1;#array;1){
    31.                 var t = array;
    32.                 lineShow("---" + i + "---")
    33.                 for(j=1;#t;1){
    34.                         lineShow(j + ") " + t[j])               
    35.                 }        
    36.         }
    37. }

    38. winform.show()
    39. win.loopMessage();
    复制代码

    另一种二维数组提取法:
    1. import win.ui;
    2. /*DSG{{*/
    3. var winform = win.form(text="模式匹配测试程序";right=599;bottom=399;)
    4. winform.add(
    5. button={cls="button";text="提数组";left=445;top=318;right=551;bottom=353;z=2};
    6. edit={cls="edit";left=17;top=26;right=394;bottom=223;edge=1;multiline=1;z=1}
    7. )
    8. /*}}*/

    9. winform.button.oncommand = function(id,event){
    10.         
    11.     var array = {}
    12.         for m1,m2,m3,m4 in string.gmatch(
    13.                 'start,1:aaaa,2:bbbb,3:cccc,4:dddd,end;start,1:eeee,2:ffff,3:gggg,4:hhhh,end;',"start,1\:(\S+?),2\:(\S+?),3\:(\S+?),4\:(\S+?),end;"
    14.         ) {  
    15.                 //添加到二维数组
    16.                 table.push( array, {m1;m2;m3;m4} )
    17.                
    18.                 //写入文本框
    19.                 winform.edit.appendText( m1,m2,m3,m4 ,'\r\n')
    20.         }
    21.         
    22.         //在文本框中显示二维数组
    23.         winform.edit.appendText( table.tostring(array),'\r\n' )
    24. }

    25. winform.show()
    26. win.loopMessage();
    复制代码

    非业余 - aardio 编程语言 - 非官方问答社区
    限时85折!暑假期间,用aardio培训班充实自己!https://mp.weixin.qq.com/s/c4Z8sZPOiMh_OTG2VPOJmA
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-2 11:40
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    26

    主题

    33

    回帖

    507

    积分

    管理员

    积分
    507
    来自: 中国贵州铜仁
    发表于 2024-1-25 08:56:26 | 显示全部楼层 来自: 中国贵州铜仁
    感谢分享
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区

    GMT+8, 2024-9-19 09:00 , Processed in 0.118702 second(s), 29 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表