java正则表达式入门

写在前面

在做实验的时候,需要读入文件。由于读入的信息以字符串的形式存储的,并且文件是按照一定的格式进行书写的,因此要得到对应的信息,就需要匹配每个字符串,这个时候就需要用到正则表达式。由于之前并没有特意去学习过正则表达式,现在用到了,简单地分享一下我所学的正则表达式。

介绍

在学正则表达式之前,总要知道这个是什么,用来做什么。官方地说,正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。我对正则表达式的理解,就是用来匹配字符串的,在字符串中找到我们需要的信息,然后进行处理。其中的首要任务就是在一堆字符串,找到我们需要的子串。
《java编程思想》中是这样描述的:

  • 正则表达式就是以某种方式来描述字符串,因此你可以说:“如果一个字符串含有这些东西,那么它就是我正在找的东西。”例如,要找一个数字,它可能有一个负号在最前面,那你就写一个负号加上一个问号,就像这样:-?

基本用法

我们最先知道的正则表达式工具应该是split()方法,它将字符串从正则表达式匹配的地方切开。虽然之前一直在用,但直到最近才知道它就是传说中的正则表达式。
正则表达式有一些基本的语法:

\ 的转义

在学语法的时候,我们直到\ 表示转义,在java正则表达式中,也需要使用\进行转义,不过,如果要表示\ 在表达式中,需要使用双斜杠\\ 表示转义。
例如,当需要表示一位数字的时候,正则表达式应该是\\d

字符

  B           表示指定字符B(类似的,A就表示字符A,a就表示字符a)

  \n         换行(一些转义与C语言相同,,还有\t等)

  \xhh       `\` 后面接十六进制,表示oxhhhh的Unicode字符

字符类

  .            任意字符

  [abc]        包含a、b和c的任何字符(等同于a|b|c)

  [^a]         除a以外的任何字符

  \s           空白字符(空格、tab、换行、换页和回车)

边界匹配符

    ^          一行的起始

    $          一行的结束

    \b         词的边界

语法其实还是比较多的,用到什么直接查就好了,本文并不是词典,就不一一罗列了。
推荐查看这篇文章的语法范例。
写到这里,大家应该对正则表达式有一个基本的概念了,那么它是如何使用的呢?下面我们进行一些代码实战。

实验

为了利用正则表达式,我们利用java中的regex包,利用其中的 Matcher 类和 Pattern 类,具体说明见官方文档 javaAPI。使用方法见如下代码,本文所有的代码都利用这两个类进行匹配。
另外,再介绍一个group方法,用于取出匹配到的字符串。
注意 :group(0)返回的是被匹配的字符串,需要从group(1)开始。

  • 最简单的匹配就是直接匹配一个字符:
String string = "A";
String pattern = "([a-zA-Z])";

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(string);
if (m.find()) {
    System.out.println("Found : " + m.group(1));
}

输出结果:Found : A

  • 也可以利用+的语法来匹配字符串 (+ 表示出现一次或多次)
String string = "ABCD";
String pattern = "([a-zA-Z]+)";

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(string);
if (m.find()) {
    System.out.println("Found : " + m.group(1));
}

Found : ABCD
这样,我们就可以组合起来。

  • 实验中的案例:
    实验中要匹配的一种字符串为:Vertex = <\”Server1\”, \”Server\”, <\”192.168.1.2\”>>
    那么,就可以利用上面所学的知识,组合起来匹配这样的字符串,代码如下:
String string = "Vertex = <\"Server1\", \"Server\", <\"192.168.1.2\">> ";
String pattern = "\"([a-zA-Z0-9]+)\",\\s*\"([a-zA-Z0-9]+)\",\\s*<\"([a-zA-Z0-9.]+)\">";

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(string);
if (m.find()) {
    System.out.println("Found value: " + m.group(1));
    System.out.println("Found value: " + m.group(2));
    System.out.println("Found value: " + m.group(3)); 
} else {
    System.out.println("NO MATCH");
}

运行结果:

Found value: Server1
Found value: Server
Found value: 192.168.1.2

注意:这里的 * 表示的是0个或多个,区别于 + 的1个或多个。

实验中可以使用的方法很多,这只是最通俗的一种,可以根据自己的喜好随意更改。

结论

正则表达式是一种非常有效的处理字符串的方式,希望大家能够通过这篇文章对正则表达式有基本的认识。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值