善用Pattern提高你的应用处理正则表达式的效率(Java)

Java中正则表达式(regex)匹配多行(Pattern.MULTILINE和Pattern.DOTALL模式) Java中,正则表达式(regex)的处理是通过Pattern类实现的。Pattern类提供了多种标志(flags)来修改正则表达式的行为。其中,Pattern.MULTILINE和Pattern.DOTALL是两个常用的模式,它们分别用于处理多行文本和让.匹配包括行终止符在内的任意字符。 阅读详情

举个简单了例子,在一个需要用于注册登录的b/s模式的应用中,在浏览器验证用户注册表单的合法性是必须的,但你为了防止hacker,在服务器再验证一次肯定也是必须的。

题目:在服务器端验证邮箱是否合法:通常你可能会这样写:

public boolean checkEmailLegal(String temp)
{
    //temp = "ddenfj#@fe_dw.comw";
    return temp.matches("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");
}


当然这样写可以满足你的需求,但是,今天要和大家分享我使用Pattern提高效率的使用心得,首先,先看一下我对小面代码进行的简单的测试:

import java.util.regex.Pattern;

public class SimpleTest {
	public static void main(String[] args)
	{
		String temp = "ddenfj#@fe_dw.comw";
		int count = 1;
		long a = System.currentTimeMillis();
		for(int i=0;i<count;i++)
		{
			temp.matches("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");
		}
		long b = System.currentTimeMillis();
		System.out.println(b-a);
		a = System.currentTimeMillis();
		Pattern emailPattern = Pattern.compile("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");
		for(int i=0;i<count;i++)
		{
			emailPattern.matcher(temp).matches();
		}
		b = System.currentTimeMillis();
		System.out.println(b-a);
	}
}
运行次数为 1 时,运行结果:

4

0

运行次数为 100 时,运行结果:

16

1

运行次数为1000时,运行结果:

111

8

运行次数为10000时,运行结果:

343

11

运行次数为100000时,运行结果:

841

65

运行次数为一千万时,运行结果:

8205

94

我们知道,匹配正则表达式首先创建有穷自动机

我的结论:从测试记过可以看出String.matches()方法的时间并不是想想中的线性增长的,可以得出的结论是jvm一定对String.matches()方法进行了缓存的处理,也就是说调用这个方法产生的一切中间对象并未被jvm清理,如果运用到你的应用上,可能效率体现得会很明显




----------------------------------------------------------------------------------------------------------

写完以上内容,还在我洋洋自得的时候,我想看一下String.matches()的源代码:

public boolean matches(String regex) {
        return Pattern.matches(regex, this);
    }


public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

看来我对jvm的上方理解是错误的,

不过从他们的源码我们可以看出来,如果把Pattern写成一个静态(static)属性,并用spring管理对象,那效率还是会提高很多的!

望共勉!



Java正则表达式:从基础到实践 简介:Java中的正则表达式是一种模式匹配语言,利用特殊字符和普通字符构成的模式来匹配、查找、替换和解析文本。它通过包中的Pattern和Matcher类实现。本简介涵盖了正则表达式的语法基础、字符类、量词、分组与反向引用、边界、预查等,并通过示例代码展示了如何在Java中使用正则表达式进行基本查找、替换等操作。正则表达式广泛用于输入验证、数据提取、日志分析等场景,掌握其使用可显著提高处理字符串问题的效率。 阅读详情

相关推荐

掌握Java正则表达式,提升字符串匹配与处理能力

本文深入探讨了Java中的正则表达式,包括量词分类、转义元字符的使用、Pattern类和Matcher类的使用方法。通过实例,详细介绍了如何编译正则表达式、执行匹配、分割字符串以及连续匹配等高级功能。

weixin_35509395的博客 453

java pattern 性能_比预期的Java正则表达式性能慢

我的任务是读取大型CSV文件(300k记录)并将regexp模式应用于每条记录.我一直是一个PHP开发人员,从来没有真正尝试过任何其他语言,但我决定尝试使用Java,我认为这样做会更快.事实上,只是逐行读取CSV文件在Java中快了3倍.但是,当我应用regexp要求时,Java实现证明比PHP脚本长10-20%.我很有可能在Java中做错了,因为我刚刚学习了这个,就像我今天去的那样.以下是两个脚...

weixin_39728909的博客 1165

Ubuntu 22.04下Colmap带CUDA支持的编译安装全攻略(附显卡架构查询指南)

本文详细指导在Ubuntu 22.04系统上从源码编译安装支持CUDA加速的Colmap,解决了官方版本无GPU支持导致处理速度慢的问题。重点包括环境依赖准备、CUDA工具链配置、显卡计算能力查询以及完整的编译安装步骤,旨在帮助研究者和开发者高效部署高性能三维重建工具。

gold8的专栏 345

正则表达式及java复杂文本处理

一  正则表达式(regular Expression)简介1.为什么需要正则表达式?文本的复杂处理2.正则表达式的优势和用途?一种强大而灵活的文本处理工具;大部分编程语言,数据库,文本编辑器,开发环境都支持正则表达式3.正则表达式定义:正如它的名字一样是描述一个规则,通过这个规则可以匹配一类字符串学习正则表达式很大程度上就是学习正则表达式的语法规则二   开发中如何使用?开发中使用正则表达式的流...

小阿四的博客 3186

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 749

【DevOps】rancher集成ldap,实现统一账号登录

登录到rancher控制台,选择【安全】-【认证】 选择【OpenLDAP】 其中【搜索起点】需要去ldap界面查配置完成

CN_Eden 1094

Pattern p = Pattern.compile(regex);

package cn.itcast_05; import java.util.regex.Matcher; import java.util.regex.Pattern; /*  * 获取功能:  * 获取下面这个字符串中由三个字符组成的单词  * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,ga

why 1万+

【AI智能体】基于OpenCode 搭建Skills环境与项目实战开发详解

基于OpenCode 搭建Skills环境与项目实战开发详解

congge 8902

10条改善Java性能的小建议:

1、使用StringBuilder StingBuilder 应该是在我们的Java代码中默认使用的,应该避免使用 + 操作符。或许你会对 StringBuilder 的语法糖(syntax sugar)持有不同意见,比如: String x = "a" + args.length + "b"; 将会被编译为: 0 new java.lang.StringBuilder [16]

dingwun11的专栏 681

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。

weixin_54787054的博客 344

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针赋值和测试

本文介绍了当使用Tessy对软件进行单元测试时如何打桩和指针相关测试的注意事项及操作要点,希望能给正在摸索Tessy的网友一点点启发。

啤酒鸭的物联网开发记录博客 1万+

java正则效率_善用Pattern提高你的应用处理正则表达式的效率(Java)

举个简单了例子,在一个需要用于注册登录的b/s模式的应用中,在浏览器验证用户注册表单的合法性是必须的,但你为了防止hacker,在服务器再验证一次肯定也是必须的。题目:在服务器端验证邮箱是否合法:通常你可能会这样写:public boolean checkEmailLegal(String temp){//temp = "ddenfj#@fe_dw.comw";return temp.matche...

weixin_42347699的博客 707

智能车浅谈——手把手让车跑起来(电磁篇)

手把手让你的电磁车上路。

qq_41954556的博客 7万+

java Pattern提高你的应用处理正则表达式的效率

http://www.voidcn.com/article/p-xedmczyz-bcz.html

zhaoyang10的专栏 3311

图形推理2-四大类六提示

图形推理笔记2

小y的学习笔记 6746

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java提高正则处理效率

Java提高正则处理效率的策略与实践在Java编程中,正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,广泛应用于字符串匹配、查找、替换和数据验证等场景。然而,不当使用正则表达式可能会导致性能问题,尤其是在处理大规模文本数据时。本文将探讨如何通过多种策略提高Java中正则表达式的处...

qq_35485206的博客 963

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JAVA基础面试题:Java中的Pattern与Matcher类及其在正则表达式中的应用

PatternPattern和Matcher类是Java中处理正则表达式的核心工具,通过预编译和灵活的匹配操作,为字符串处理提供了强大的支持。理解其核心概念、应用场景及优化手段,能够帮助开发者在实际项目中更高效地利用这一特性。Victor的回答让面试官频频点头,显然对他的表现非常满意。

qq_61302385的博客 568

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java的正则表达式

掌握Java中的正则表达式,可以大大提高字符串处理的效率和灵活性。通过熟悉正则表达式的基础语法和Java提供的API,开发者可以轻松应对各种复杂的字符串匹配和处理需求。在实际开发中,合理使用正则表达式,不仅能简化代码,还能提高程序的性能和可读性。

2301_77006130的博客 2009

Java 文本检索神器 “正则表达式“

我相信,作为一名程序员或者准程序员,你肯定是知道正则表达式的。作为计算机领域最伟大的发明之一,正则表达式简单、强大,它可以极大地提高我们工作中的文本处理效率。现在,各大操作系统、编程语言、文本编辑器都已经支持正则表达式,甚至我还和极客时间的编辑开玩笑说,他们也应该好好学学正则这门手艺。正则,就是正则表达式,英文是Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。在编程语言中,正则常常用来简化文本处理的逻辑。在Linux。

BASK2311的博客 5万+

Java语言的正则表达式

正则表达式是一个由字符组成的字符串,用于描述一组符合特定规则的字符串。它的核心思想是通过模式匹配来识别和处理字符串。正则表达式不仅在计算机科学中有重要应用,也常常用在文本编辑器、搜索引擎等工具中。Java语言中的正则表达式为文本处理提供了一种强大而灵活的方式。通过正则表达式,我们可以实现字符串的匹配、验证、替换等多种功能。尽管正则表达式具有较高的学习曲线,但掌握它后将极大地提升我们的开发效率和代码质量。在实际应用中,合理使用正则表达式可以帮助我们解决许多复杂的文本处理问题。

2501_90168208的博客 1677

Java 正则表达式

本文介绍了 Java 中的正则表达式,包括基本概念、语法规则和常用方法。在使用正则表达式时,应该根据需要选择合适的元字符和限定符,并注意性能问题。同时,建议使用可读性强且易于维护的规则,以提高代码的可读性和可维护性。

兴趣是最好的老师,勤能补拙 2781

正则表达式:从概念到 Java 实现的全面解析

它通过一系列预定义的字符和规则,描述字符串的结构特征,从而实现对文本的高效处理。正则表达式(Regular Expression,简称 Regex)是一种。等),匹配时直接对应字符串中的相同字符。包提供正则表达式支持,核心类是。正则表达式的核心是 “模式”,由。(具有特殊含义的字符)组成。即字面意义上的字符,如字母((编译正则表达式)和。

dujdjrjrjr的博客 1720

Java正则表达式从入门到精通

正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在Java中,正则表达式广泛应用于字符串处理、文件匹配、数据验证等领域。本文将带你从入门到精通Java正则表达式。一、正则表达式的基本概念。四、正则表达式的常用场景。

csbysj2020 648

java中使用正则表达式

计算机专业毕业或者使用过Unix、Perl等产品的读者一定对正则表达式有一定的印象,即使没有接触过正则表达式也不要被它的外貌所吓倒。虽然做到精通正则表达式比较难,但是能够掌握它的基本应用却是非常容易的,一旦把正则表达式应用于实际问题的解决就可以非常明显的提高工作效率。 正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上提出来的,具有完整语法的正则表达式使用在字

u012422446的博客 848
上一篇: CentOS SVN客户端应用
下一篇: Javascript中定义类
逆乾坤
博客等级 码龄16年 30粉丝 18原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值