`
zhiweiofli
  • 浏览: 515030 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

强悍的正则表达式

 
阅读更多

     在编写程序时,时常会遇到要替换掉字符串中的某部分,或者找出某部分,又或者删除某部分,总之就是字符串匹配的问题。

     Java的String类也提供了强大的字符串处理函数,例如split,subString,index,replace等等,在简单的场合,也许他们已经够用了,可是在一些重复性大,批量操作的情况下,他们就得配合一个工具,来扩充他们的能力了,那是一个强大而且通用的工具--正则表达式!

     今天我就遇到一个问题,需要在每次的http请求中更改其请求的IP地址!也就是IP匹配,单单匹配IP就简单得多,看下面的正则表达式:

"(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
  "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
  "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
  "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))";

 逐个分解:

(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5]))).
  •  “|”,这个在Java的逻辑表达式里就是表示“或"的符号,这里也是,所以我们按”|“把上面的表达式分解;
  •  [1-9],这表示一个数字,其取值范围是1到9,当然[1-9][1-9]就表示两位数,如此类推;
  •  (1[0-9][0-9]|(2[0-4][0-9]|25[0-5])),这里面的(),表示一个集合,值可以去里面的表达式结果,分解里面就是1[0-9][0-9]和(2[0-4][0-9]|25[0-5]);
  • 1[0-9][0-9]表示取值范围100到199的数字;
  • (2[0-4][0-9]|25[0-5])表示取200到249,或250到255的数字,很明显这是IP字段的取值范围,正则表达式也就这样做了判断!

 

     当然,抛开精度的话,也可以写成这样子:(\\d+).(\\d+).(\\d+).(\\d+)

\d+表示取任意位数的数字


     不过这里要注意,我在这里写的都是在Java字符里串用的,所以在\d+前面要加上”\“转义字符,不然在Java的编译器里会报错!

 

       不过我的需求还没完,还需要匹配端口!

       有了上面的基础,下面的小要求,就简单了:

"\\//(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
    "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
    "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
    "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))(:\\d+\\/|\\/)"

       分别在前面增加匹配”//"的,以及在后面增加匹配":*"/和"/",这里面分两种情况,一是有端口的,二是没有端口的,所以中间用了一个“|”。

完整的函数见下面:

	/**
	 * 当配置为空,则返回原来的URL
	 * @param orgUrl
	 * @return 
	 */
	private String replaceImageUrl(String orgUrl){
		
		String result = orgUrl;
		
		String serverIp = Info.getImageServerUrl();
		
		if(!serverIp.equals("")){
			serverIp = "//" + serverIp + "/";
			result = orgUrl.replaceFirst(IP_Format, serverIp);
		}
		
		return result;
	}
	/***
	 * 识别以//开头的,以/结尾的包含IP和端口的正则表达式
	 */
	private String IP_Format = "\\//(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
    "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
    "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))." +
    "(0|[1-9]|[1-9][0-9]|(1[0-9][0-9]|(2[0-4][0-9]|25[0-5])))(:\\d+\\/|\\/)";

 

再附上收集回来的:

 

java常用正则表达式
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^0|[1-9][0-9]*$"。
只能输入有两位小数的正实数:"^[0-9]+(\.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(\.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][0-9]*$"。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。 
 

 

 

分享到:
评论

相关推荐

    UE使用技巧(宏、正则表达式)

    处理字符时,少不了UE(UltraEidt)的帮忙,只有在处理中才发现其功能之强悍。在此,共享个人积累,抛砖引玉,希望对大家有用。

    小巧强悍的工具Convert:正则表达式测试/代码转换/翻译/编解码/加解密

    1、Regular Expression Tester:正则表达式测试/生成; 2、C#<->VB.Net Converter:C#与VB.Net的相互转换; 3、Google Translator:调用Google语言内核,世界和语种的互译; 4、Encoding<->Decoding:编码和解码,...

    .Net用来验证所有正则表达式的类 强悍

    在.NET框架中,正则表达式是用于处理和验证文本模式的强大工具。它提供了一种灵活的方法来检查字符串是否符合特定的模式或规则。这里我们将深入探讨.NET中的Regex类,这是一个核心类,用于执行正则表达式匹配和验证...

    功能超级强悍的文本编辑器 PilotEdit 14.3.0 + x64 中文多语免费版.zip

    文本编辑器,支持文本编辑,比较,FTP编辑,FTP上传下载,加密,十六进制编辑,列模式,回行显示,正则表达式,多行查找和替换,代码折叠,关键字高亮显示,编辑400GB的大文件,比较100GB的大文件,对超过1G的大文件...

    MYDataGridView超级扩展控件源码和使用实例demo

    9.扩展DataGridViewMaskedTextBox(正则表达式列,可设置任意正则表达式) 10.扩展DataGridViewTreeView(下拉树功能,有点小毛病,懒得改,呵呵) 11.MYDataGridView(呵呵,调用的时候直接调用这个控件就可以了,...

    用C++编写的强悍"表达式"求值源代码

    这通常涉及到字符串处理和正则表达式,用于识别并提取输入的中缀表达式中的操作数和运算符。我们可以使用词法分析和语法分析的技术,如有限状态自动机(FSM)或者更高级的词法生成器(如Flex)和解析器生成器(如...

    强悍的Web资料集合

    XMLDOM DOM DHTML HTML XML 正则表达式 XSL XmlHttp WEB开发人员参考大全 AJAX CSS DIV+CSS CSS JAVAScript 基本上罗列Web开发的很多资,里面的XmlDOM、DOM、DHTML、CSS、XmlHttp、AJXA、以及XSL和Xpath重要资料……

    ReNamer(文件重命名) v6.8.0.0.zip

    软件小巧但功能强悍该程序支持包括插入、删除、移除、替换、前缀、后缀以及正则表达式等十四种重命名规则,可以实现文件改前缀、改后缀、替换、大小写转换、删除符号、添加数字序号、删除数字、字符等多种形式。...

    检测一个函数是否是JavaScript原生函数的小技巧

    在我的开发工作中经常会遇到需要判断一个函数是否是JavaScript原生函数的情况,有时候这是一个很必要的...toString方法会返回这个方法的字符串形式,然后用正则表达式判断里面包含的字符。 更强悍的方法 Lodash的创始

    editplus强悍的代码编辑器

    在版本2.11(epp211.exe可能代表的版本号)中,EditPlus可能已经包含了各种性能优化和新特性,比如增强的查找和替换功能,支持正则表达式,使得搜索和替换更加灵活和强大。Serial.exe可能是一个注册程序,用于激活...

    强悍的文件异同比较工具

    - **过滤与忽略**:根据规则或正则表达式过滤掉不关心的差异。 - **自定义设置**:用户可以根据需求调整比较的细节,如字符编码、行结束符等。 总的来说,一个“强悍的文件异同比较工具”是提高工作效率和确保数据...

    最智能化的免写发布接口的网站采集软件推荐-熊猫采集借鉴.pdf

    它通过全程可视化鼠标操作,极大地降低了数据采集的技术门槛,让用户无需掌握复杂的正则表达式技术,就能轻松实现采集设置。 熊猫采集软件的核心特点包括: 1. **通用性和复杂性并存**:软件设计兼顾广泛的应用...

    超级免费记事本Notepad++

    此外,它还具备查找和替换功能,支持正则表达式,使得文本处理更为便捷。对于程序员来说,Notepad++还具有代码折叠功能,可以隐藏和展开代码块,方便查看和管理大型代码结构。 Notepad++的一个显著优势是其对...

    EditPlus 强悍的小型IDE 适合于多语言入门

    - **查找与替换**:强大的查找和替换功能,支持正则表达式,便于进行复杂的文本查找和替换操作。 ### 2. Java编程入门利器 - **内置Java编译器**:EditPlus可以直接编译和运行Java程序,无需额外安装JDK,简化了...

    Linux学习笔记(强悍总结值得一看).pdf

    - grep-E:使用扩展的正则表达式。 此外,还提到了使用管道符“|”可以将一个命令的输出作为另一个命令的输入,这在Linux命令行中是常见的用法。 这些知识构成了Linux基础学习中的重要部分,对新用户来说是很好的...

    非常强悍的JS 实现IP地址分配 源码

    3. IP地址有效性验证:利用正则表达式,可以编写函数验证输入的字符串是否符合IP地址的格式,例如`/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?...

    五段实用的js高级技巧

    - **正则表达式:** 在此函数中使用正则表达式来匹配类名,确保正确选取元素。 **应用场景:** - 当需要根据类名选择元素集合,同时要保证兼容性,尤其是在旧版浏览器中。 ### 综合应用和性能考虑 这些技巧都考虑...

    MFEXECOM论坛开源

    不要采用 eval(), 正则表达式 e 修饰符 3. 不要采用 autoload 4. 不要采用 $$var 多重变量 5. 不要使用 PHP 高级特性 __call __set __get 等魔术方法 6. 尽量采用函数封装功能,通过前缀区分模块。 【mfexeUI...

Global site tag (gtag.js) - Google Analytics