概念

正则表达式(Regular Expression),又称规则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

java三个类

java.util.regex 包主要包括以下三个类:

  • Pattern 类

    pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

import java.util.regex.*;class RegexExample1{public static void main(String[] args){String content = "I am noob " +"from runoob.com.";String pattern = ".*runoob.*";boolean isMatch = Pattern.matches(pattern, content);System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);}
}
复制代码
  • Matcher 类

    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

import java.util.regex.Pattern;public class RegexMatches
{public static void main( String[] args ){// 按指定模式在字符串查找String line = "This order was placed for QT3000! OK?";String pattern = "(\\D*)(\\d+)(.*)";// 创建 Pattern 对象Pattern r = Pattern.compile(pattern);// 现在创建 matcher 对象Matcher m = r.matcher(line);if (m.find( )) {System.out.println("Found value: " + m.group(0) );System.out.println("Found value: " + m.group(1) );System.out.println("Found value: " + m.group(2) );System.out.println("Found value: " + m.group(3) ); } else {System.out.println("NO MATCH");}}
}
复制代码
  • PatternSyntaxException

    PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

    语法

    先来个.*?的解释吧

    . :  单个任意字符

    *  :  重复多次、贪婪匹配。注意*在正则中不是任意字符,而是一个限定限定出现的次数

    ? :  出现1次或者0次、非贪婪匹配

范例

提取一个字符串的中文

public static void main(String[] args) {
String str = "123abc这个中文cde123abc也要提取123ab";
Pattern p = null;
Matcher m = null;
String value = null;
p = Pattern.compile("([/u4e00-/u9fa5]+)");
m = p.matcher(str);
while (m.find()) {
value = m.group(0);
System.out.println(value);
}
}
运行结果:
这个中文
也要提取
复制代码

正则表达式拆分字符串

通过竖线分割字符串

// 通过竖线分割字符串private static void splitByLine() {String lineStr = "123|456|789";// split("|")分割得到的字符串数组,每个数组元素只有一个字符,类似于toCharArray的结果//String[] lineArray = lineStr.split("|");// 竖线是正则串的保留字符,需要进行转义(在竖线前面加两个反斜杆)String[] lineArray = lineStr.split("\\|");for (String item : lineArray) {System.out.println("line item = "+item);}}
复制代码

正则表达式替换字符串

使用正则表达式提取html中指定内容并进行替换

import java.util.regex.*;public class Main {public static void main(String[] args) {String content = "<p><strong>1、new 运算符</strong>:用于创建对象和调用构造函数。这个我们创建对象实例就比较常用了,比如:</p><pre class="prettyprint linenums cs">     StringBuilder str=new  StringBuilder();\r\n\r</pre><p><strong>"+ "2、new 修饰符</strong>:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。简单的说,就是现在写的这个类,想写一个和基类中相同的成员,而不继承基类的。运用多态的特性时,也不会调用这个显示隐藏的方法。具体看下如下代码:"+ "</p><pre class="prettyprint linenums">using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ConsoleApp2\r\n{\r\n    public class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            animal a = new animal();\r\n            a.name = "animal";\r\n            a.say();\r\n            cat c = new cat();\r\n            c.name = "cat";\r\n            c.say();\r\n            dog d = new dog();\r\n            d.name = "dog";\r\n            d.say();\r\n            sheep s = new sheep();\r\n            s.name = "sheep";\r\n            s.say();\r\n            animal a1 = new cat();\r\n            a1.say();\r\n            animal a2 = new dog();\r\n            a2.say();\r\n            animal a3 = new sheep();\r\n            a3.say();\r\n        }\r\n    }\r\n    class animal\r\n    {\r\n        public string name { get; set; }\r\n        public virtual void say()\r\n        {\r\n            Console.WriteLine("animal say");\r\n        }\r\n    }\r\n    class cat : animal\r\n    {\r\n        public override void say()\r\n        {\r\n            Console.WriteLine("cat say");\r\n        }\r\n    }\r\n    class dog : animal\r\n    {\r\n        public new void say()   //这个方法被显示隐藏了\r\n        {\r\n            Console.WriteLine("dog say");\r\n        }\r\n    }\r\n    class sheep : animal\r\n    {\r\n    }\r\n\r\n}<br></pre><p><strong>";String replaced = Pattern.compile("<pre class="prettyprint linenums\s*([a-z]*?)"\s*>(.+?)</pre>",Pattern.DOTALL|Pattern.MULTILINE).matcher(content).replaceAll(match -> {System.out.println("------------------");System.out.println(match.group(1));System.out.println(match.group(2));System.out.println(match.group());System.out.println("------------------");return "";});System.out.println(replaced);}
}
复制代码

正则表

达式提取字符串String data = "我的1<if test='case == 1'>1</if>我的2<if test='case == 2'>2</if>";String regex = "<if test='([\\s\\S]*?)'>([\\s\\S]*?)</if>";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(data);while (matcher.find()) {String group = matcher.group();System.out.println(group);}

作者:后端Q
链接:https://juejin.cn/post/7154811194304364557
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

技术群:添加小编微信并备注进群

小编微信:mm1552923

公众号:dotNet编程大全

正则表达式操作字符串相关推荐

  1. Python的re模块 --- 正则表达式操作

    这个模块提供了与 Perl 语言类似的正则表达式匹配操作. 模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes). 但是,Unicode 字符串与8位 ...

  2. Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 转自:http://www.cnblogs.com/PythonHome/archive/2011/11/19/2255459.html 这个模块提供了与 ...

  3. 用 JavaScript 操作字符串

    虽然 JavaScript 有很多用处,但是处理字符串是其中最流行的一个.下面让我们深入地分析一下使用 JavaScript 操作字符串.在 JavaScript 中, String 是对象. Str ...

  4. 正则表达式 以字符串开头_干货-Shell编程之正则表达式

    正则表达式 一.正则表达式的定义 正则表达式又称正规表达式.常规表达式.在代码中常简写为 regex.regexp 或 RE. 1.正则表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串 ...

  5. Python使用正则表达式处理字符串

    关于正则表达式基本语法请参考之前发过的文章常用正则表达式锦集与Python中正则表达式的用法,正则表达式扩展语法的高级用法后面会专门整理后再发. Python标准库re提供了正则表达式操作所需要的功能 ...

  6. 【Python笔记】使用 re 模块实现正则表达式操作

    使用 re 模块实现正则表达式操作 匹配字符串 使用 match() 方法进行匹配 使用 search() 方法进行匹配 使用 findall() 方法进行匹配 替换字符串 使用正则表达式分割字符串 ...

  7. 正则表达式查找字符串_如何简单理解正则表达式?只需1分钟就可以看到她优美的舞姿...

    Hi,大家好,本章节开始将会从零开始和大家用图文的方式,让你从零基础学会正则表达式!有兴趣的小伙伴可以持续关注我,或者在专栏中进行查看自我学习,愿与君携手前行! 本文将要说到的正则表达式?可能初学的你 ...

  8. C#利用正则表达式实现字符串搜索

    摘要:本文给出了在C#下利用正则表达式实现字符串搜索功能的方法,通过对.NET框架下的正则表达式的研究及实例分析,总结了正则表达式的元字符.规则.选项等. 关键字:正则表达式.元字符.字符串.匹配 1 ...

  9. EditPlus正则表达式替换字符串详解

    EditPlus正则表达式替换字符串详解 发布时间:April 8, 2007 分类:Regular <PHP 实现多服务器共享 SESSION 数据> <利用javascript在 ...

最新文章

  1. 人脸识别数据集精粹(下)
  2. 使用Asp.net MVC, Jquery, Jquery UI构建基于Ajax的RIA应用.(更新Demo下载)
  3. 世界上第一台电子计算机到底是谁发明的?
  4. @ConfigurationProperties和@Value 注入
  5. 基站基带fgpa 服务器芯片,基于FPGA的AIS基带数据处理芯片设计
  6. is running beyond the ‘VIRTUAL‘ memory limit. Current usage: 123.5 MB of 1 GB physical memory used
  7. gpu处理信号_GPU中的并行运算,加速你的Matlab程序
  8. html部分位置属性
  9. 从数学入手,3招打破机器学习的边界
  10. Http方法:Get请求与Post请求的区别
  11. Java Web学习总结(20)——基于ZooKeeper的分布式session实现
  12. 《2020信息消费战“疫”案例集》发布 邬贺铨院士作序推荐(附下载连接)
  13. 【PL/SQL】九九乘法口诀表
  14. javascript(JS)混淆工具
  15. 2017计算机二级c语言题库,2017年计算机C语言二级考试题库
  16. Android Studio个人所得税首页布局制作
  17. 2节串联锂电池充电管理芯片IC,5V,12V升降压解决方案
  18. Python 每日一记1启程
  19. 2016届毕业设计(论文) 基本规范及档案袋封面填写要求
  20. 从外包月薪5K到阿里月薪15K,大厂面试必备技能

热门文章

  1. 从零开始学习Linux运维,成为IT领域翘楚(一)
  2. VS2008文本框输入法(转载)
  3. TQ2440开发板学习纪实(1)---最简单的独立运行汇编程序
  4. Revit:不过期启动“TR天正建筑 V5.0 2020”方法
  5. Discovery Studio Visualizer简单操作
  6. 春节倒计时,让我来秀一手:用Python制作一个对联生成器
  7. python:中文词法分析(LAC)
  8. 一种基于神经网络的对话模型
  9. 基于数据挖掘的疾病数据可视化分析与预测系统
  10. 关于结构体类型的讲解