Java基础知识回顾--正则表达式

锐浪报表 Grid++Report 子报表 Delphi 锐浪报表 Grid++Report 是国内较好的报表控件,本人一直使用它,做出很多特色的报表。可以说你的报表设计出来,它基本上能做出来。 但是它帮助文件上,说的不深,近期因为要做一个有关社工的报表,大表中,嵌套2个子表。可以说,一个表到三个数据集,分别打印。 在认真看了帮助的基础上,网上探索,基本无此类,特别是Delphi的帮助,几乎为零。经二天摸索,做出来了。 一、设计思路 1、大表和二个小表,可以设计为三个表,分别使用三个GridppReport控件,取名... 阅读详情

RegularExpressions
字符串处理利器

正则表达式语法
正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。
特殊字符
下表包含了单字符元字符的列表以及它们在正则表达式中的行为。
若要匹配这些特殊字符之一,必须首先转义字符,即,在字符前面加反斜杠字符 ()。 例如,若要搜索“+”文本字符,可使用表达式“+”。
这里写图片描述
这里写图片描述

元字符
下表包含了多字符元字符的列表以及它们在正则表达式中的行为。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

非打印字符
下表包含表示非打印字符的转义序列。
这里写图片描述

优先级顺序
正则表达式的计算方式与算术表达式非常类似;即从左到右进行计算,并遵循优先级顺序。
下表按从高到低的顺序包含了正则表达式运算符的优先级顺序。
这里写图片描述

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


public class Test {

    public static void main(String[] args) {
        //简单认识正则表达式的概念
        /*
        p("abc".matches("..."));
        //两个反斜杠d就是转义一个反斜杠d表示数字
        p("a8729a".replaceAll("\\d", "-"));
        Pattern p = Pattern.compile("[a-z]{3}");
        Matcher m = p.matcher("fgh");
        p(m.matches());
        p("fgha".matches("[a-z]{3}"));
        */

        //初步认识. * + ? 
        // * 零个或多个字符
        // + 一个或多个字符
        // ? 一个或零个
        /*
        p("a".matches("."));
        p("aa".matches("aa"));
        p("aaaa".matches("a*"));
        p("aaaa".matches("a+"));
        p("".matches("a*"));
        p("aaaa".matches("a?"));
        p("".matches("a?"));
        p("a".matches("a?"));
        p("214523145234532".matches("\\d{3,100}"));
        p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));
        p("192".matches("[0-2][0-9][0-9]"));
        */

        //范围
        /*
        p("a".matches("[abc]"));
        //取非
        p("a".matches("[^abc]"));
        p("A".matches("[a-zA-Z]"));
        //底下两种都是或者
        p("A".matches("[a-z]|[A-Z]"));
        p("A".matches("[a-z[A-Z]]"));
        p("R".matches("[A-Z&&[RFG]]"));
        */

        //认识\s \w \d \
        /**
        * \s 所有的空白字符
        * \w 小写a-z和A-Z和下划线_和0-9,构成关键字的字符
        * \d 0-9
        **/
        /*
        p(" \n\r\t".matches("\\s{4}"));
        p(" ".matches("\\S"));
        p("a_8".matches("\\w{3}"));
        p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
        p("\\".matches("\\\\"));
        */

        //POSIX Style
        //p("a".matches("\\p{Lower}"));

        //boundary
        /**
        * 这个介绍看后面配图
        **/
        /*
        p("hello sir".matches("^h.*"));
        p("hello sir".matches(".*ir$"));
        p("hello sir".matches("^h[a-z]{1,3}o\\b.*")); //true,\b是单词边界
        p("hellosir".matches("^h[a-z]{1,3}o\\b.*")); //false
        //whilte lines 空白行
        p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));

        p("aaa 8888c".matches(".*\\d{4}."));
        p("aaa 8888c".matches(".*\\b\\d{4}."));
        p("aaa8888c".matches(".*\\d{4}."));
        p("aaa8888c".matches(".*\\b\\d{4}."));
        */

        //email
        //p("asdfasdfsafsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));

        //matches find lookingAt
        /*
        Pattern p = Pattern.compile("\\d{3,5}");
        String s = "123-34345-234-00";
        Matcher m = p.matcher(s);
        p(m.matches());
        m.reset();
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        p(m.start() + "-" + m.end());
        p(m.find());
        //p(m.start() + "-" + m.end());找不到用这个就会报错
        p(m.lookingAt()); //每次都从头开始找起
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
        */

        //replacement
        /*
        Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava afasdfasdf");
        StringBuffer buf = new StringBuffer();
        int i=0;
        while(m.find()) {
            i++;
            if(i%2 == 0) {
                m.appendReplacement(buf, "java");
            } else {
                m.appendReplacement(buf, "JAVA");
            }
        }
        m.appendTail(buf);
        p(buf);
        */

        //group
        /*
        Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})"); //这个中间的两个小括号就是分组用的,分为两组
        String s = "123aa-34345bb-234cc-00";
        Matcher m = p.matcher(s);
        while(m.find()) {
            //p(m.group());
            p(m.group(1)); //分组输出,正则表达式中小括号分组
        }
        */

        //qulifiers 修订词
        /*
        Pattern p = Pattern.compile(".{3,10}+[0-9]");  //一下子吞最大的10个,然后发现不匹配吐出一个匹配
        //Pattern p = Pattern.compile(".{3,10}?[0-9]");  //这个加问号的就是不贪婪的,只读最少的就是aaaa5
        String s = "aaaa5bbbb68";
        Matcher m = p.matcher(s);
        if(m.find())
            p(m.start() + "-" + m.end());
        else 
            p("not match!");
        */

        //non-capturing groups 用得比较少,用的时候试一下
        /*
        Pattern p = Pattern.compile(".{3}(?=a)");
        String s = "444a66b";
        Matcher m = p.matcher(s);
        while(m.find()) {
            p(m.group());
        }
        */

        //back refenrences 向前引用
        /*
        Pattern p = Pattern.compile("(\\d(\\d))\\2");
        String s = "122";
        Matcher m = p.matcher(s);
        p(m.matches());
        */

        //flags的简写
        //Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
        p("Java".matches("(?i)(java)"));
    }

    public static void p(Object o) {
        System.out.println(o);
    }

}

上述代码又看不懂的这有图片解释
这里写图片描述
这里写图片描述
这里写图片描述

下面贴出网页中抓取邮件的小例子。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class EmailSpider {

    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("D:\\share\\courseware\\1043633.html"));
            String line = "";
            while((line=br.readLine()) != null) {
                parse(line);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static void parse(String line) {
        Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
        Matcher m = p.matcher(line);
        while(m.find()) {
            System.out.println(m.group());
        }
    }

}
最优化学习笔记1——关于拟牛顿法推导 从2020年3月份到现在,一年的时间里断断续续自学最优化,结合豆瓣读书、知乎等网站上的推荐,翻阅了以下书和课程: Stephen Boyd和Lieven Vandenberghe的《Convex Optimization》,这本书被公认为学习凸优化的必读经典著作,其中大量的篇幅讲应用,讲理论和算法的篇幅稍少一些。在B网站上有Boyd的视频课程,油管上也有,不过只有英文字幕,如果是零基础接触,直接看Boyd的视频稍显费劲,B站上也有凌青老师以《Convex Optimization》为教材的讲解,推荐作为入 阅读详情

相关推荐

ROS Noetic + Realsense ROS 2.3.2 在鲁班猫4上的完整工作空间搭建与相机启动调试

本文详细介绍了在鲁班猫4(RK3588S)开发板上搭建ROS Noetic与Realsense ROS 2.3.2开发环境的完整流程,包括Realsense SDK安装、工作空间配置、D435i深度相机驱动调试等关键步骤,为机器人视觉系统开发提供实用指南。

weixin_33217202的博客 237

eFuse加超低功耗MCU:工业电源路径保护与自动恢复设计解析

在嵌入式与工业设备的供电设计中,电源路径保护直接决定系统可靠性。传统保险丝和TVS响应慢、不可自恢复,难以应对瞬态过压与过流冲击。eFuse作为集成保护逻辑的智能电源开关,能在几十微秒内切断故障,并支持软启动、限流与状态输出;搭配超低功耗MCU,可实现故障记录、自动恢复和远程诊断。工业传感器节点、IO模块、电池供电仪表等场景,尤其依赖这种快速反应与智能管理结合的保护机制。以TPS259483 eFuse与STM32L021K4组合为例,讲解限流值、过压/欠压阈值计算,固件状态机设计及实测踩坑,为高可靠电源路

weixin_34037173的博客 406

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6418

JAVA基础知识回顾-----模式匹配(正则表达式)-----随想随写

模式匹配 正则表达式: 为了实现模式匹配,模式的构造应遵循某种规则,这样的模式称为正则表达式 包java.util.regex Pattern类 Matcher类 PatternSyntaxException异常类 MatchResult接口   Pattern 模式 Pattern对象是一个正则表达式的编译形式 Pattern构造方法私有,因此要得到该类对象,需要调用该类...

huiwinner的专栏 245

UE4_用户控件_6_通过控件蓝图内部变量来修改进度条的值

发现控件类图类的引用和用户控类引用不兼容,修改变量类型。我们需要添加到视口,同时设置输入模式。创建按钮的点击事件,当点击时调用角色的自定义事件clearwidget。可以了,但是没有退出控件,没有鼠标,所以改进一下。

Growthofnotes的博客 1236

14003.xilinx系统移植

文章目录1 xilinx 系统移植 sd卡版本1.1 创建项目1.2 拷贝 *.hdf 到工程目录1.3 根据hdf文件对系统进行配置1.3.1 设置内核源码路径为本地1.3.2 设置分区的名称与大小1.4 清除本地缓存并编译成功1.5 打包生成BOOT.BIN并拷贝到sd卡1.6 问题1.7 系统启动成功1.8 配置设备树文件丰富系统外设 1 xilinx 系统移植 sd卡版本 芯片型号 ZYNQ UltraScale+ XAZU2EG ,对应厂家提供的demo板为 zu102或zu104 1.1 创建

写给自己的笔记 482

Java基础知识回顾(一):字符串小结

Java的基础知识回顾之字符串 一、引言   很多人喜欢在前面加入赘述,事实上去技术网站找相关的内容的一般都应当已经对相应知识有一定了解,因此我不再过多赘述字符串到底是什么东西,在官网中已经写得很明确了,字符串实际上是一种特殊的类,内置了一个字符数组(所以你能对它进行下标查找,包括集合的arraylist底层也是一个数组),并附加了很多其他方法,方便我们进行一些操作。有兴趣的话可以去百度中查阅...

huangxin2015的博客 383

Open3D 合并两个点云【2025最新版】

两个点云中的数据连接,博客长期更新,本文最新更新时间为:2025年4月26日。

点云侠的博客 7435

正则表达式复习

前言 这是我第一次复习之前学的的正则表达式,以后说不定会有补充和再次的复习。 本文会复习正则表达式的知识点,并且会写几个不同编程语言环境下的使用方式。 介绍 正则表达式是用来匹配字符串的,我们可以用来写爬虫爬网页上的内容,老实说我最初想学这个就是想在e站上爬点h图。 普通字符 首先,正则表达式里面的内容也是字符串,如果你在表达式里写了aA,那可以匹配到"1aAdfa"中的"aA"。其中aA代表着它...

Deadmice的博客 250

YOLOv11改进策略【损失函数篇】| 引入Soft-NMS,提升密集遮挡场景检测精度,包括GIoU-NMS、DIoU-NMS、CIoU-NMS、SIoU-NMS、 EIou-NMS

传统的非极大值抑制(NMS)算法在目标检测中存在一个问题,即当一个物体的检测框与具有最高得分的检测框M有重叠(在预定义的重叠阈值内)时,会将该检测框的得分设置为零,从而导致该物体可能被遗漏,降低了平均精度。为了解决这个问题,作者提出了Soft-NMS算法。本文将YOLOv11默认的NMS修改成GIoU-NMSDIoU-NMSCIoU-NMSSIoU-NMSEIou-NMS。

Limiiiing的博客 4318

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

zhengzaifeidelushang的博客 3290

正则表达式-备忘

好久不用正则表达式,基础全忘光。最近项目需要,看thinking in java又刚好看到了字符串正则表达式,借此机会记录下来自己需要的基础知识以备不时之需。正则表达本身内容还有很多,以后有空继续丰富完善。 利用正则表达式去验证一些具有一定规则的字符串,往往事半功倍。 正则表达式在各种计算机语言或各种应用领域得到了广大的应用和发展,这里主要说javascript和java。 javasc...

weixin_30832351的博客 92

TC3XX - MCAL知识点(四十二):AURIX™ TC3xx实现多相电机需要多核配合使用的场景与实操分析

本文探讨了多相电机控制系统中的关键技术问题,重点分析了多核处理器在电机控制中的应用。针对十二相电机等复杂应用场景,提出了同步采样、多核协同等解决方案。文章详细阐述了相电流同步采样原理及EBTresos配置方法,分析了ADC硬件触发机制和多核配合策略。通过Core0和Core1的协同工作设计,解决了位置信息采集与FOC算法执行的时序问题,并提供了代码实现示例。实验验证了采用ATOM0_7同时触发两个核ADC中断的可行性,为多相电机控制系统的实现提供了技术参考。

梦想技术家 497

JAVA知识总结【持续更新】

JAVA知识总结【持续更新】基础知识标识符设计模式单例设计模式懒汉式饿汉式 基础知识 标识符 字母、数据、下划线、美元符号【0-9、a-z、A-Z、$、_ 】 数字不可以开头。 不可以使用关键字。 设计模式 单例设计模式 解决的问题:保证一个类在内存中的对象唯一性。 懒汉式 //懒汉式:延迟加载方式。 class Single2{ private Single2(){} private static Single2 s = null; public static Single2 ge

qq_40128285的博客 256

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java基础知识点杂谈(二)——常用系统类的使用

本文大致测试整理了一些常用系统类的常用方法,并附上部分原理(有很多资料是网上找的,地址一般都附在那个模块后面。当然这个翻阅别人优秀博客的过程也受益良多,尤其是String和Class的部分,以前不懂的地方看完后便豁然开朗)。

风过孤屿,山海自成诗行。 1277

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

面试总结三

上午去面试了。公司不小。面试官也灰常好。但是基础不扎实,说话无层次的我还是欠火候。下面把记忆中的笔试题写下来。以后好看看 1.写sql语言,主要考察日期 2.正则表达式 [^ef] 的意思 3.linux下,怎么在后台定时执行一段程序 crontab 4.使用哪些开源软件   5.java语言中基本类型short,float占多少二进制位 6.java序列化在输入输出中传...

小学生 236

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java基础知识回顾

关于JavaSE的一些比较基础的内容回顾,也是开始准备秋招和实习了qwq

backordinary的博客 1112

Python笔记

哎,刚上手python不久,还没有写过什么完整的项目,就敢去面试Python岗位的实习生了,今天被宽德科技的人问的彻底木有颜面,对于numpy等等库里面的东西还没怎么用过,然后问到C++里面的protected,模式设计等等,接着一大堆名词扔过来= =,早就忘记七七八八了,怪自己学的不扎实吧,比如list,dict,set只是知道怎么用,但是并不知道怎么实现的,其实最近也没有复习编程语言本质的东西

业精于勤,荒于嬉;行成于思,毁于随。 414

JAVA基础知识总结(万字长文一文了解JAVA所有基础知识)(补充篇)(正则表达式+Lambda表达式)

这期是Java长文总结的补充篇,主要总结Java中遇到的正则表达式与Lambda表达式。!!本期总结了正则表达式和Lambda表示式。

wxchyy的博客 1153

Java基础总结回顾

title: Java基础总结回顾 date: 2022-04-12 17:31:14 tags: Java categories: Java cover: https://cover.png feature: false 1. 说明 1.1 编译与运行 编译:是指将编写的 Java 源文件翻译成 JVM 认识的 class 文件,在这个过程中, javac 编译器会检查所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功 运行:是指将 class文件 交给 JVM 去运行,此时 J.

凡的博客 3099

正则表达式的语法

正则表达式语法简介  正则表达式是独立于任何语言的,虽然不同的 语言中其语法略有不同。  正则表达式的语法可以分为 • 特殊字符 • 边界匹配符 • 逻辑操作符 • 量词等  这些基本的语法规则合成使用,共同构成了正 则表达式强大的表示和匹配功能  一般字符的语法在前一节已经介绍过(例如字符i) 特殊字符的表达  例如,如果我们要查找一个字符串,这个字符 串中至少包含两行(两行可以不相邻),前面 一行中存在两个制表符,它们中间仅仅隔一数 字,后面一行中至少有一个制表符,则正则表 达式可以这样写:

静Yu的博客 3万+

【Java回顾】Day2 正则表达式----异常处理

必须是Throwable的子类检查性异常类,Exception类运行时异常类,RuntimeException类。

爱因斯小柚的博客 1279

JAVA ----正则表达式基础及相关应用

正则表达式是Java、Php等编程语言中相当重要的一环,在实际应用程序代码中相当广泛,更是网络安全领域中不可或缺的一点。下面总讲一下正则表达式的基础知识以及相关应用 什么是正则表达式:正则表达式(regular expression,简写为regex)是一个字符串,用来描述匹配一个字符串集合的模式。 对于字符串处理来说,正则表达式是一个强大的工具,可以使用正则表达式来匹配、替换和拆分字符串。 目录 HINT 1 匹配字符串 HINT 2 正则表达式语法 HINT ...

m0_52317537的博客 1106

java基础知识回顾

java常用API: StringBuffer:  1.      StringBuffer和String的区别:   http://blog.youkuaiyun.com/rmn190/article/details/1492013  2.      常用方法:  构造: StringBuffer();StringBuffer(CharSequence seq);    StringBuf

billycoder的专栏 523

Java基础知识回顾-replace和replaceAll

replace 和 replaceAll 是JAVA中常用的替换字符的方法,它们的区别是: 1)replace 的参数是 char 和 CharSequence ,即可以支持字符的替换,也支持字符串的替换( CharSequence 即字符串序列的意思,说白了也就是字符串); 2)replaceAll 的参数是regex ,即基于规则表达式的替换,比如,可以通过 replaceAll("\d", ...

随时记 356

Java知识回顾 (6)正则表达式、方法、文件与异常

一、正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。 Java 正则表达式和 Perl 的是最为相似的。 java.util.regex 包主要包括以下三个类: Pattern 类: pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建...

weixin_30631587的博客 156
上一篇: Java基础知识回顾--网络编程基础
下一篇: Java基础知识回顾--反射机制
杜鲁门
博客等级 码龄11年 219粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值