RegExp正则校验之Java及R测试

前言

  正则表达式(英语:Regular Expression)原属于计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里边,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,Perl,Shell,R,Java等等。

  因本人最近刚好在学习R语言进行网页数据抓取,觉得有必要对正则表达式做个小总结,于是便有了此文。

1.重要元字符及其简短描述


元字符


描述


\


将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。


^


匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。


$


匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。


*


匹配前面的子表达式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。


+


匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。


?


匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。


{n}


n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。


{n,}


n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。


{n,m}


m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。


?


当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

2.常见正则校验:

 1 var regexEnum =
 2
 3 {
 4
 5 intege:"^-?[1-9]\\d*$", //整数
 6
 7 intege1:"^[1-9]\\d*$", //正整数
 8
 9 intege2:"^-[1-9]\\d*$", //负整数
10
11 num:"^([+-]?)\\d*\\.?\\d+$", //数字
12
13 num1:"^[1-9]\\d*|0$", //正数(正整数 + 0)
14
15 num2:"^-[1-9]\\d*|0$", //负数(负整数 + 0)
16
17 decmal:"^([+-]?)\\d*\\.\\d+$", //浮点数
18
19 decmal1:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$", //正浮点数
20
21 decmal2:"^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$",//负浮点数
22
23 decmal3:"^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$",//浮点数
24
25 decmal4:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$",//非负浮点数(正浮点数 + 0)
26
27 decmal5:"^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$",//非正浮点数(负浮点数 + 0)
28
29 email:"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", //邮件
30
31 color:"^[a-fA-F0-9]{6}$", //颜色
32
33 url:"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //url
34
35 chinese:"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$", //仅中文
36
37 ascii:"^[\\x00-\\xFF]+$", //仅ACSII字符
38
39 zipcode:"^\\d{6}$", //邮编
40
41 mobile:"^13[0-9]{9}|15[012356789][0-9]{8}|18[0256789][0-9]{8}|147[0-9]{8}$", //手机
42
43 ip4:"^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$", //ip地址
44
45 notempty:"^\\S+$", //非空
46
47 picture:"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", //图片
48
49 rar:"(.*)\\.(rar|zip|7zip|tgz)$", //压缩文件
50
51 date:"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$", //日期
52
53 qq:"^[1-9]*[1-9][0-9]*$", //QQ号码
54
55 tel:"^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$", //电话号码的函数(包括验证国内区号,国际区号,分机号)
56
57 username:"^\\w+$", //用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串
58
59 letter:"^[A-Za-z]+$", //字母
60
61 letter_u:"^[A-Z]+$", //大写字母
62
63 letter_l:"^[a-z]+$", //小写字母
64
65 }
66
67  

3.实例测试

 1 #-----R测试--------
 2
 3 #=======正则验证测试
 4
 5 pattern="^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
 6
 7 list<-c("[email protected]","[email protected]","[email protected]","[email protected]");print(list)
 8
 9 lists<-paste(list,collapse = ‘,‘);print(lists)
10
11
12
13 #--grep()返回符合的元素下标;grep1()返回所有元素的布尔值
14
15 grep(pattern,list)
16
17 grepl(pattern,list)

R测试结果:

 1 //----Java测试---------
 2
 3 package com;
 4
 5 import java.util.regex.*;
 6
 7 /**
 8
 9 * java正则表达式验证
10
11 */
12
13 public class RegExpTest
14
15 {
16
17     /**
18
19      * 正则验证方法一
20
21      */
22
23     public static boolean regExpTest(String input) {
24
25         //验证标识符必须由字母、数字、下划线组成
26
27         Pattern p = Pattern.compile("[a-z0-9A-Z_]+");
28
29         Matcher m = p.matcher(input);
30
31         return  m.matches();
32
33
34
35     }
36
37     /**
38
39      * 正则验证方法二
40
41      */
42
43     public static boolean regExpEmail(String input){
44
45      //验证个人定义的邮箱
46
47      String regex = "^[a-zA-Z0-9][email protected][0-9a-z]{2,4}+\\.+[a-z]{2,4}$";
48
49      return  Pattern.matches(regex, input);
50
51     }
52
53     public static void main(String[] args)
54
55     {
56
57      System.out.println(regExpTest("root10086"));
58
59      System.out.println(regExpEmail("[email protected]"));
60
61      System.out.println(regExpEmail("[email protected]"));
62
63     }
64
65 }

Java测试结果:

结语:

  正则表达式可深可浅。在我看来,其重大作用主要也就是三方面,一是“校验”,二是数据抓取,三是全局定位替换。以上内容只是本人在近期学习中的部分整理。同时也希望为其它需要了解正则表达式的朋友提供一丝参考。

时间: 2024-12-21 21:34:40

RegExp正则校验之Java及R测试的相关文章

校验总结:校验是否是中英文等等(1.正则校验 2.hibernate volidator)

1.正则校验 import java.util.regex.Matcher;import java.util.regex.Pattern; public class Validation { //------------------常量定义 /** * Email正则表达式="^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; */ //public static f

JAVA web课堂测试1

1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分)2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分)3性别:要求用单选框或下拉框实现,选项只有“男”或“女”:(1分)4学号:要求八位数字组成,前四位为“2018”开头,输入自己学号:(1分)5姓名:输入自己的姓名:5电子邮箱:要求判断正确格式[email protected]:(1分)6点击“添加”按钮,将学生个人信息存储到数据库中.(3分)7可以演示连接上数据库.(2分) 源代

java 与 R 相互调用

https://www.r-project.org/ http://cos.name/2013/08/r-rjava-java/ http://blog.csdn.net/hwssg/article/details/39177959 目录 rJava介绍 rJava安装 rJava实现R调用Java rJava(JRI)实现Java调用R (win7) rJava(JRI)实现Java调用R (Ubuntu) 1. rJava介绍 rJava是一个R语言和Java语言的通信接口,通过底层JNI实

java调用R

环境:win7 32位  jdk1.7  R 2.15.0   java调用r主要有三种方式,rJava,rServer还有rCaller,这边主要讲用rJava调用 rJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法.由于rJava是底层接口,并使用JNI作为接口调用,所以效率非常高.在JRI的方案中,JVM直接通过内存直接加载RVM,调用过程性能几乎无损耗,因此是非常高效连接通道,是R和Java通信的首选开发包. 之前用R3.0.2

浅谈Manifest.java与R.java及各个目录的作用

在开发Android项目中,Manifest.java与R.java是自动生成的.但是对于测试来说,非常重要.经过师父的点拨,我对Manifest.java与R.java有了更深一层的理解. Manifest.java会自动生成引用包的属性配置,有权限的管理作用.引用的package必须声明了权限才能使用. R.java是对资源的索引,自动标识资源索引,相当于资源字典,里面包含项目中引用资源的属性.配置等. 在我看来,Manifest.java与R.java就相当于日志文件,记录所引用的包与资源

JAVA调用R脚本

0 前言R是一种非常方便易用的绘图.统计分析.ML算法设计方面的脚本语言.实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型,那么可以考虑java程序中直接调用R的脚本.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 本文将搞清楚如下几个问题: 1)java调用R的方式有哪些及每种方式如何使用? 2)这些调用方式的有哪些优缺点? 下面开始. 1 java调用R的两种方式1.1 远程调用模式(使

Java调用R语言

R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R. Rserve作为一个package发布在CRAN上,可以直接使用install.packages("Rserve")进行安装.需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器就可以供

Rsession让Java调用R更简单

Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器.随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长.现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言. 要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥

Redis rdb文件CRC64校验算法 Java实现

查看RDB文件结构,发现最后的8字节是CRC64校验算得,从文件头开始直到8字节校验码前的FF结束码(含),经过CRC64校验计算发现,貌似最后的8字节是小端模式实现的. 参考redis的crc64实现的代码,点击查看 Java代码如下: 1 package com.jadic.utils; 2 3 /** 4 * @author Jadic 5 * @created 2014-5-15 6 */ 7 public class CRC64 { 8 private static final lon