java中正则表达式概述

时间:2024-08-22 06:33:09 JAVA认证 我要投稿
  • 相关推荐

java中正则表达式概述

  正则表达式是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。那么java正则表达式的内容是什么呢?下面跟yjbys小编一起来看看吧!

  一、正则表达式到底是什么东西?

  在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

  很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。

  二、正则表达式的基本操作

  正则表达式定义:符合一定规则的表达式。

  作用:用于专门操作字符串。

  特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。

  好处:可以简化对字符串的复杂操作。

  弊端:符号定义越多,正则越长,阅读性越差。

  具体操作功能:

  1,匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

  2,切割:String split();

  3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。

  4,获取:将字符串中的符合规则的子串取出。

  操作步骤:

  1),将正则表达式封装成对象。

  2),让正则对象和要操作的字符串相关联。

  3),关联后,获取正则匹配引擎。

  4),通过引擎对符合规则的子串进行操作,比如取出。

  三、API文档中常用符号

字符类

[abc]

a、b 或 c(简单类)

[^abc]

任何字符,除了 a、b 或 c(否定)

[a-zA-Z]

a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]]

a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]]

d、e 或 f(交集)

[a-z&&[^bc]]

a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]]

a 到 z,而非 m 到 p:[a-lq-z](减去)

预定义字符类

.

任何字符(与行结束符可能匹配也可能不匹配)

\d

数字:[0-9]

\D

非数字: [^0-9]

\s

空白字符:[ \t\n\x0B\f\r]

\S

非空白字符:[^\s]

\w

单词字符:[a-zA-Z_0-9]

\W

非单词字符:[^\w]

边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾

Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

X,至少 n 次,但是不超过 m

  四、方法摘要

static Pattern

compile(String regex) 将给定的正则表达式编译到模式中。

static Pattern

compile(String regex, int flags) 将给定的正则表达式编译到具有给定标志的模式中。

int

flags() 返回此模式的匹配标志。

Matcher

matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。

static boolean

matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。

String

pattern() 返回在其中编译过此模式的正则表达式。

static String

quote(String s) 返回指定 String 的字面值模式 String。

String[]

split(CharSequence input) 围绕此模式的匹配拆分给定输入序列。

String[]

split(CharSequence input, int limit) 围绕此模式的匹配拆分给定输入序列。

String

toString() 返回此模式的字符串表示形式。

  五、案例

  1、匹配案例

  1)电话号码匹配案例

  public static void checkTel()

  {

  String tel = "16900001111";

  String telReg = "1[358]\\d{9}";

  System.out.println(tel.matches(telReg));

  }

  2)数字和字母组成的字符串匹配

  public static void demo()

  {

  String str = "b23a23456789";

  String reg = "[a-zA-Z]\\d*";

  boolean b= str.matches(reg);

  System.out.println(b);

  }

  3)QQ号码匹配

  要求:5~15 0不能开头,只能是数字

  public static void checkQQ()

  {

  String qq = "123a454";

  String regex = "[1-9]\\d{4,14}";

  boolean flag = qq.matches(regex);

  if(flag)

  System.out.println(qq+"...is ok");

  else

  System.out.println(qq+"... 不合法");

  }

  2、切割案例

  按照.进行切割:splitDemo("zhangsan.lisi.wangwu","\\.");

  按照\\进行切割:splitDemo("c:\\abc\\a.txt","\\\\");

  按照多个空格来进行切割:String reg = " +";空格+

  按照叠词切割:splitDemo("erkktyqqquizzzzzo","(.)\\1+");//按照叠词完成切割。为了可以让规则的结果被重用,可以将规则封装成一个组。用()完成。组的出现都有编号。从1开始。 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。

  3、替换案例

  将字符串中的数组替换成#。

  String str = "wer1389980000ty1234564uiod234345675f";

  replaceAllDemo(str,"\\d{5,}","#");

  将重叠的字符替换成单个字母。zzzz->z

  String str1 = "erkktyqqquizzzzzo";//

  replaceAllDemo(str1,"(.)\\1+","$1");

  4、获取案例

  获取:将字符串中的符合规则的子串取出。

  public static void getDemo()

  {

  String str = "ming tian jiu yao fang jia le ,da jia。";

  System.out.println(str);

  String reg = "\\b[a-z]{4}\\b";

  //将规则封装成对象。

  Pattern p = Pattern.compile(reg);

  //让正则对象和要作用的字符串相关联。获取匹配器对象。

  Matcher m = p.matcher(str);

  //将规则作用到字符串上,并进行符合规则的子串循环查找。

  while(m.find())

  {

  //用于获取匹配后结果。

  System.out.println(m.group());

  System.out.println(m.start()+"...."+m.end());

  }

  }

【java中正则表达式概述】相关文章:

JAVA正则表达式语法大全03-29

Java中的动态代码编程03-05

在Java中执行JavaScript代码04-01

java程序中如何调用linux命令03-29

Java中类的设计技巧有哪些03-04

Oracle正则表达式汇集03-28

JAVA和.NET开发过程中的区别04-27

java中continue跳转语句使用方法03-29

java中File类有哪些使用方法03-14