【Java web】正则表达式

目录

介绍:

Pattern与Matcher的用法

常用正则元字符

正则:普通字符

正则:\d

正则:\w

正则:.

正则:?

正则:*

正则:^

正则:\s

常用反义元字符

限定字符

懒惰匹配和贪婪匹配

懒惰匹配:匹配尽可能少的字符        regex="a.*?d";    懒惰匹配

贪婪匹配:

常用的实用正则表达式整理

练习:


介绍:

正则表达式是由一些特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。

主要使用Pattern以及Matcher实现

在Java web中导入这两个类

<%@ page import="java.util.regex.Pattern" %>
<%@ page import="java.util.regex.Matcher" %>

Pattern与Matcher的用法

Pattern作用是给正则表达式一个匹配模式

Matcher作用是怎加表达式匹配字符串的权力

看以下代码来初步了解该表达式

<%
Pattern pattern;//创建一个Pattern对象
Matcher matcher;//创建一个Matter对象
String input="ffsssdffdjfffsssff";//要匹配的字符串

String regex="(ff)(sss)";//匹配模式,与ffsss进行匹配,至于括号作用在下面会说明,以及在后面文章中有正则元字符的介绍

pattern=Pattern.compile(regex);
//将匹配模式传入Pattern并且创建pattern对象

matcher=pattern.matcher(input);
//将要匹配的字符串传入,创建matcher对象

while(matcher.find()){//matcher.find()表示查找符合匹配的字符,
//从字符串首地址开始,如果匹配则返回true,下次匹配从当前位置开始,直到字符末地址返回false

	out.println(matcher.group());
//表示输出匹配到的字符串,  matcher.group(1)表示输出,匹配到的字符串中第一个括号中的内容也就是ff
//matcher.group(2)输出,匹配到的字符串中第二个括号中的内容也就是sss

	out.println(matcher.start());
    //Matcher中的start()和end()。start(),点进方法可以看到返回的是上一个匹配项的起始索引,如果没有        匹配项将抛出IllegalStateException异常。同理,end()则为结束的索引。
}输出为ffsss 0 ffsss 11
%>

常用正则元字符

元字符过多,只介绍常用的元字符

  • 正则:普通字符

         如: aaa    上面例子就是普通正则原字符

  • 正则:\d

        如:aaa\d

        表示匹配的字符是aaa开头还要加一个数字,例如:aaa4

<%
Pattern pattern;
Matcher matcher;
String input="dnsfaaa4";
String regex="aaa\\d";//注意:在Java定义的正则里,由于一个\表示的是字符串转义,因此在Java定义带有\的元字符时,还需要多写一个\,即\\,至于其他语言,自己可查阅相关资料进行了解。
pattern=Pattern.compile(regex);
matcher=pattern.matcher(input);
while(matcher.find()){
	out.println(matcher.group());
	out.println(matcher.start());
}//输出为aaa4 4
%>

为了不累赘,这里不贴过多贴代码了,有问题写在评论区啦

  • 正则:\w

        表示一个字母(大小写都可以),数字,或者下划线

  • 正则:.

         . (小数点) 则表示“\n”和"\r"之外的任何单个字符。

  • 正则:?

        ? 表示匹配前面的子表达式零次或一次。

  • 正则:*

        ? 表示匹配前面的子表达式零次或一次。例如: -?[0-9]   表示一位数的正数或者负数(-?中的  -  表示符号负号,?表示出现)

  • 正则:^

        ^表示匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思,例如[^abc]表示出了abc之外的任意字符

  • 正则:\s

        \s:匹配任意的空白符   空格。例如:\d^a\s   第一个字符为数字,第二个字符为除a的任意值,第三个字符为空格;  如   2h   ,7O    ,3       

常用反义元字符

反义字符:多用于查找除某个字符以外其他任意字符均可以的情况

代码/语法说明
\W匹配任意不是字母,数字,下划线,汉字的字符,如+,-
\S匹配任意不是空白符的字符,如,;’
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置

字母都是大写,与小写字母一起记忆  \w  ,  \s  ,  \d  ,  \b  分别表示,

\w:匹配一个字母(大小写都可以),数字,或者下划线

\s:匹配任意的空白符   空格

\d:匹配数字

\b匹配单词的开始或结束,例如:

<%
Pattern pattern;
Matcher matcher;
String regex="\\bOlive\\b";//注意:在Java定义的正则里,由于一个\表示的是字符串转义,因此在Java定义带有\的元字符时,还需要多写一个\,即\\,至于其他语言,自己可查阅相关资料进行了解。
pattern=Pattern.compile(regex);
String input="I Love Oliver and Olive";
matcher=pattern.matcher(input);
double sum=0;
while (matcher.find())
{
	out.print(matcher.group());
}
%>

限定字符

限定字符多用于重复匹配次数

常用的限定符

*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

懒惰匹配和贪婪匹配

  • 懒惰匹配:匹配尽可能少的字符        regex="a.*?d";    懒惰匹配

懒惰限定符

代码/语法说明
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

懒惰匹配例子:

<%
Pattern pattern;
Matcher matcher;
String regex="a.*?b";//懒惰匹配
pattern=Pattern.compile(regex);
String input="asnbaeb";
matcher=pattern.matcher(input);
double sum=0;
while (matcher.find())
{
	out.println(matcher.group());
}输出为asnb和aeb
%>

贪婪匹配:

如果改成:regex2="a.*d";  为贪婪匹配,那么输出为asnbaeb;

常用的实用正则表达式整理

(摘自自学编程网)

  •         只能输入数字:"^[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"。

练习:

只看不练假把式

下面给个题目练练

题:一次李华给他的朋友写信,其中分为三个自然段,

(第一自然段为20个词,第二然段是25个词,第三自然段20.5个词)问该文章有多少个词

使用:“第一自然段为20个词,第二然段是25个词,第三自然段20个词”作为字符串的输入

<%
Pattern pattern;
Matcher matcher;
String regex="-?[0-9][0-9]{0,5}[.]?[0-9]{0,6}";
pattern=Pattern.compile(regex);
String input="第一自然段为20个词,第二然段是25个词,第三自然段20.5个词";
matcher=pattern.matcher(input);
double sum=0;
while (matcher.find())
{String str=matcher.group();
sum +=Double.parseDouble(str);
}
out.print(sum);
%>

这些都是正则表达式中基础的部分,这篇文章适合没接触正则表达式或者不太了解的人群,想要更加深刻的理解还要多家练习。

一起进步,多加指正。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值