【JAVA】jave正则表达式

Java 网络爬虫,就是这么的简单 这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识。第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻的新闻标题和详情页为例,需要提取的内容如下图所示: 我们需要提取图中圈出来的文字及其对应的链接,在提取的过程中,我们会使用两种方式来提取,一种是 Jsoup 的方式,另一种是 httpcli... 阅读详情

Java正则表达式

一:什么是正则表达式

    1.定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

    2.用途:

  • 字符串匹配(字符匹配)
  • 字符串查找
  • 字符串替换
  • 字符串分割

    例如:

  • 从网页中揪出email地址
  • IP地址是否正确
  • 从网页中揪出链接

    3.java中处理正则表达式的类:

  • java.lang.String
  • java.util.regex.Pattern:模式类:字符串要被匹配的这么一个模式,该模式本身已经被编译过,使用的话效率要高很多。
  • java.util.regex.Matcher:匹配类:这个模式匹配某个字符串所产生的结果,这个结果可能会有很多个。

    4:下面通过一个小程序简单介绍一下正则表达式

 

复制代码

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

public class Test {

    public static void main(String[] args) {
        //matches()判断字符串是否匹配某个表达式,"."表示任何一个字符
        p("abc".matches("..."));
        //将字符串"a2389a"中的数字用*替换,\d 表示“0--9”数字
        p("a2389a".replaceAll("\\d", "*"));
        //将任何是a--z的字符串长度为3的字符串进行编译,这样可以加快匹配速度
        Pattern p = Pattern.compile("[a-z]{3}");
        //进行匹配,并将匹配结果放在Matcher对象中
        Matcher m = p.matcher("abc");
        p(m.matches());
        //上面的三行代码可以用下面一行代码代替
        p("abc".matches("[a-z]{3}"));
    }
    
    public static void p(Object o){
        System.out.println(o);
    }
} 

复制代码

下面是打印结果

true
a****a
true
true

 现在通过一些实验来说明正则表达式的匹配规则,这儿是Greedy方式

  .              任何字符

 a?             a一次或一次也没有

 a*             a零次或多次

 a+            a一次或多次

 a{n}?      a恰好 n 次

 a{n,}?       a至少n次 

 a{n,m}?   a至少n次,但是不超过m次

 

复制代码

        //初步认识. * + ?
        p("a".matches("."));//true
        p("aa".matches("aa"));//true
        p("aaaa".matches("a*"));//true
        p("aaaa".matches("a+"));//true
        p("".matches("a*"));//true
        p("aaaa".matches("a?"));//false
        p("".matches("a?"));//true
        p("a".matches("a?"));//true
        p("1232435463685899".matches("\\d{3,100}"));//true
        p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//false
        p("192".matches("[0-2][0-9][0-9]"));//true

复制代码

 

[abc]                        a、b 或 c(简单类)

[^abc]                      任何字符,除了 a、b 或 c(否定)

[a-zA-Z]                   a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]                a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]             d、e 或 f(交集)

[a-z&&[^bc]]             a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]]            a 到 z,而非 m 到 p:[a-lq-z](减去)

 

复制代码

        //范围
        p("a".matches("[abc]"));//true
        p("a".matches("[^abc]"));//false
        p("A".matches("[a-zA-Z]"));//true
        p("A".matches("[a-z]|[A-Z]"));//true
        p("A".matches("[a-z[A-Z]]"));//true
        p("R".matches("[A-Z&&[RFG]]"));//true

复制代码

 

\d                          数字:[0-9]

\D                         非数字: [^0-9]

\s                          空白字符:[ \t\n\x0B\f\r]

\S                         非空白字符:[^\s]

\w                         单词字符:[a-zA-Z_0-9]

\W                        非单词字符:[^\w]

 

         //认识\s \w \d \
        p("\n\r\t".matches("\\s(4)"));//false
        p(" ".matches("\\S"));//false
        p("a_8 ".matches("\\w(3)"));//false
        p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));//true
        p("\\".matches("\\\\"));//true

 

 边界匹配器

      ^                                          行的开头

      $                                          行的结尾

      \b                                        单词边界

      \B                                        非单词边界

      \A                                        输入的开头

      \G                                       上一个匹配的结尾

      \Z                                       输入的结尾,仅用于最后的结束符(如果有的话)

      \z                                       输入的结尾

 

复制代码

        //边界匹配
        p("hello sir".matches("^h.*"));//true
        p("hello sir".matches(".*ir$"));//true
        p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//true
        p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//false
        //空白行:一个或多个(空白并且非换行符)开头,并以换行符结尾
        p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));//true

复制代码

 方法解析

matches():匹配整个字符串

find():匹配子字符串

lookingAt():永远从整个字符串的开头开始匹配

复制代码

//email
        p("asdsfdfagf@adsdsfd.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));//true
        
        //matches() find() lookingAt()
        Pattern p = Pattern.compile("\\d{3,5}");
        Matcher m = p.matcher("123-34345-234-00");
        
        //将整个"123-34345-234-00"用正则表达式引擎查找匹配,当到第一个"-"不匹配了,就停止,
        //但不会将不匹配的"-"吐出来
        p(m.matches());
        //将不匹配的"-"吐出来
        m.reset();
        
        //1:当前面有p(m.matches());查找子字符串从"...34345-234-00"开始
        //将会是第1,2两个查到"34345"和"234" 后面2个查不到为false
        //2:当前面有p(m.matches());和m.reset();查找子字符串从"123-34345-234-00"开始
        //将为true,true,true,false
        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());
        //要是没找到就会报异常java.lang.IllegalStateException
        //p(m.start()+"---"+m.end());
        
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());
        p(m.lookingAt());

复制代码

字符串替换:下面这种方法对于字符串替换非常灵活

复制代码

        //字符串替换
        //Pattern.CASE_INSENSITIVE大小写不敏感
        Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher("java Java jAva ILoveJavA youHateJAVA adsdsfd");
        //存放字符串
        StringBuffer  buf = new StringBuffer();
        //计数奇偶数
        int i  = 0;
        while(m.find()){
            i++;
            if(i%2 == 0){
                m.appendReplacement(buf, "java");
            }else{
                m.appendReplacement(buf, "JAVA");
            }
        }
        //不加这句话,字符串adsdsfd将会被遗弃
        m.appendTail(buf);
        p(buf);

复制代码

结果打印:

JAVA java JAVA ILovejava youHateJAVA adsdsfd

分组:

复制代码

        //group分组,用()分组
        Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
        String s = "123aa-34345bb-234cc-00";
        Matcher m = p.matcher(s);
        p(m.groupCount());//2组
        while(m.find()){
            p(m.group());//数字字母都有
            //p(m.group(1));//只有数字
            //p(m.group(2));//只有字母
        }

复制代码

【华为机考】【坐标移动】Jave Python C++ C 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10;A1A;;YAD;等。下面是一个简单的例子 如:A10;S20;W10;D30;X;A1A;B10A11;;A10;处理过程:起点(0,0)数据范围:每组输入的字符串长度满足 1≤n≤10000。 阅读详情

相关推荐

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1727

Java 正则详解

Java正则详解

Byyyi耀的博客 1788

MATLAB 车牌识别系统

车牌识别系统利用计算机视觉和图像处理技术,自动识别车辆牌照上的字符信息。本系统基于 MATLAB 实现车牌识别,包括图像预处理、车牌定位、字符分割、字符识别等模块。车牌识别系统是实现智能交通和公共安全的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和系统开发。

走向CTO的路上... 698

Notepad++正则表达式匹配IP

容易出现错误,写成\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3},因为正则表达式中“.”是一个匹配式,所以这个的覆盖范围更大些。正则表达式:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

weixin_38811052的博客 806

python:实现brutefore破解wifi(附完整源码)

python:实现brutefore破解wifi(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 5700

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8800

Java 正则表达式(深度长文)

Java正则表达式(深度长文)

senxu_的博客 7万+

【unity实战】Cinemachine虚拟相机实战,使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制

这里主要是探讨如何使用InputSystem+Cinemachine+CharacterController复刻各种主流游戏的相机控制,我们主要专注Cinemachine实战效果,所以并不会深入讨论Cinemachine和CharacterController比较细节的参数介绍。注意:前面为了测试方便,我还是先用的旧的输入系统代替InputSystem【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3747

ip的正则表达式 java,项目实战:Java正则表达式验证IP地址

IP 地址是网络上每台计算机的唯一标识,因此 IP 地址的错误输入将使程序无法运行。下面使用前面学习的正则表达式知识,编写一个 Java 程序来验证 IP 地址是否合法。在定义正则表达式之前,首先要知道一个正确 IP 地址的格式及组成部分。IP 地址由 4 字节构成,每字节的值为 0~255,各字节通过一个句点分隔。因此,IP 地址中的每字节有至少一个,至多三个数字。下面是为 IP 地址编写的正则...

weixin_28687415的博客 409

QML从入门到实战 - 完整学习路线

想入门 QML 开发?来 “从零开始学 QML” 专栏,海量源码 + 实战案例 + 大型项目拆解,手把手教你搞定跨平台 UI 设计,小白也能轻松掌握!

BenBierBa的博客 3473

Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)

Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1188

java正则表达式

目录 一、概念 二、正则表达式语法 三、捕获组 四、Pattern类与Matcher类 1.matches( ) 2.split( ) 3.find( ) 4.group 5.start( )和end( ) 6.replace替换 7.reset( ) 8.代码演示 五、正则表达式在Java中的应用 1.判断功能 2.分割功能 3.替换功能 一、概念 正则表达式(regex)是一个字符串,由字面值字符和特殊符号组成,是用来描述匹配一个字符串集合的模式,可以用来匹配、.

m0_62618110的博客 6万+

使用STM32H7点亮RGB屏幕

希望本文能对你有所帮助!RGB屏幕是一种具有红、绿、蓝三种颜色通道的显示设备,通过控制每个通道的亮度,可以显示出丰富多彩的图像和动画。要使用STM32H7控制RGB屏幕,我们需要连接适当的引脚,并编写适当的代码来控制每个颜色通道的亮度。在主循环中,我们先点亮红色通道,然后延迟一段时间,接着点亮绿色通道,再延迟一段时间,最后点亮蓝色通道,并再次延迟。需要注意的是,示例代码中的延迟循环使用了一个简单的计数器实现,但实际应用中可能需要更精确的延迟方式,例如使用定时器中断或操作系统提供的延迟函数。

QoyOle的博客 923

Java正则表达式及其用法

正则表达式 正则表达式是字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作。 String类里的几个特殊方法 boolean matches(String regex)//判断该字符串是否与指定正则表示regex匹配 String replaceAll(String regex, String replacement)// 将字符串中所有匹配regex的子串替换成replace...

weixin_43222122的博客 276

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java使用FFmpeg处理视频文件指南

Java使用FFmpeg处理视频文件指南 本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取、码率压缩、分辨率转换等功能; 之前在网上浏览了一大圈Java使用FFmpeg处理音视频的文章,大多都讲的比较简单,楼主在实操过程中踩了很多坑也填了很多坑,希望这份详细的踩坑&填坑指南能帮助到大家; 1. 什么是FFmpeg 点我了解 2. 开发前准备 在使用Java调用FFmp...

weixin_30892889的博客 884

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java 正则 多个空格_java正则表达式 多个空格替换多个成-

今天遇到一个正则表达式问题,如题,需求是将“aaabbb”替换成“aaa---bbb”,关键来了,要求正则表达式前面是aaa,后面是bbb。如s.replaceAll("aaa\\s+bbb","aaa-bbb");这样就只能换成一个-不要告诉我s.replaceAll("","-"),这个我也会。网友的方法:String str = "qqqqqaaaadrrr ssssaaa ...

weixin_36243739的博客 370

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java 正規表示 group_详解Java 正则表达式 (上篇)

前言在编程语言中,除了容器集合、多线程并发、IO流等等基础组件之外,还有一项专门处理字符串的“奇淫巧技”,这就是正则表达式。Perl语言正是凭借强大的正则表达式才异军突起的。对于Java来说,自从jdk1.7之后,正则表达式也逐渐强大起来,不再是之前的半吊子了。现在的Java也非吴下阿蒙,其正则表达式也不逊于其他主流语言了。本篇将详细描述Java正则表达式的用法、技巧等等,让你领略一下正则表达式的...

weixin_39535557的博客 224

Java正则表达式实例详解

创建正则表达式 你可以从比较简单的东西入手学习正则表达式。要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档。 字符 B 字符B \xhh 16进制值0xhh 所表示的字符 \uhhhh 16进制值0xhhhh 所表示的Unicode字符

Hsienhua's blog 876

Java日记之正则表达式将多个空格换为一个

/** * 给定输入的字符串,将字符串中的单词顺序颠倒,但要保持单词的字符顺序。例如:给定 input=“changchun university of science and technology”, 输出output=“technology and science of university changchun”。 解答过程中,要注意对特殊情况的处理,例如,输入为“ ”,即多个空格时,要输出“ ”,即一个空格 * * */ static Scanner scan = new Scann

qq_45596525的博客 1281

Jave基础3

package Number; import java.util.Date;//导入类 public class First { static String s1 = "Hello";//静态全局变量(可以跨类) public static void main(String [] args) { //字符串 //String && new String构建 String str1="hello"; String str2=new String("world"); Stri

qq_44265131的博客 189

java 正则 (.)_详解Java 正则表达式 (上篇)

前言在编程语言中,除了容器集合、多线程并发、IO流等等基础组件之外,还有一项专门处理字符串的“奇淫巧技”,这就是正则表达式。Perl语言正是凭借强大的正则表达式才异军突起的。对于Java来说,自从jdk1.7之后,正则表达式也逐渐强大起来,不再是之前的半吊子了。现在的Java也非吴下阿蒙,其正则表达式也不逊于其他主流语言了。本篇将详细描述Java正则表达式的用法、技巧等等,让你领略一下正则表达式的...

weixin_36070880的博客 364

【Jave学习】

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

m0_74335911的博客 159

响应式网页设计之正则表达式

JavaScript对象编程(七)一、认识正则表达式1.什么是正则表达式2.正则表达式的作用3.正则表达式规则二、正则表达式的使用1.正则表达式的基本语法三、正则对象RegExp1.创建正则对象2.正则对象的三种方法四、网页小案例1.题目要求2.源码奉上 补充:文章中所有的代码都是写在html文件中,JS代码需要用< script >< /script >标签包起来。 一、认识正则表达式 1.什么是正则表达式 正则表达式(Regular Expression,简称为RegEx),是用

GSCY 3340

java email 正则_Java正则表达式提取 Email 地址

[java]代码库import java.util.regex.Matcher;import java.util.regex.Pattern;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;public class RegularExpres...

weixin_42109598的博客 310

JAVA中正则表达式的应用

一、应用场景 在Java中,当我们想要验证用户输入是否符合规范时,可以选择正则表达式 我们可以用正则表达式来实现匹配,替换或拆分字符串 二、正则表达式的常见用法 1、指定字符 正则表达式 待验证字符串 T or F Java Java True Java Jave False 2、. 任意单个字符(换行除外) 正则表达式 待验证字符串 T or F Jav. Java True Jav.. Java Fa

HZNU_优快云001的博客 1007
上一篇: 【POJ】poj 3320 (尺取法)
下一篇: 【POJ】poj 1001(高精度)
三生石1103
博客等级 码龄12年 16粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值