正则表达式(一)

  正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。找到匹配这些模式的部分就可以对它处理。正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题:匹配、选择、编辑以及验证。

1、基本语法

字符:
B                 指定字符B
\xhh             十六进制为oxhh的字符
\uhhhh            十六进制表示为oxhhhh的Unicode字符
\t                制表符Tab
\n                换行符
\r                回车
\f                换页
\e                转义


字符类:
.                 任意字符
[abc]             包含a、b、c的任意字符(同a|b|c)
[^abc]            除了a、b、c之外的任意字符(否定)
[a-zA-z]          a-z或者A-Z的任意字符(范围)
[abc[hij]]        同a|b|c|h|i|j。合并
[a-z&&[hij]]      任意h、i或j(交)
\s                空白符(空格、tab、换行、换页和回车)
\S                非空白符([^\s])
\d                数字[0-9]
\D                非数字[^0-9]
\w                词字符[a-zA-Z0-9]
\W                [^\w]


逻辑操作符:
XY                Y跟在X后面
X|Y               X或者Y
(X)               捕获组。可以在表达式中用\i引用第i个捕获组


边界匹配符
^                一行的起始
$                一行的结束
\b               词的边界
\B               非词的边界
\G               前一个匹配的结束

2、应用正则表达式的最简单的途径,就是利用String类内建的功能。先来看一个例子:

1 public class IntegerMatch {
2     public static void main(String[] args) {
3         System.out.println("-1234".matches("-?\\d+"));
4         System.out.println("5678".matches("-?\\d+"));
5         System.out.println("+911".matches("-?\\d+"));
6         System.out.println("+911".matches("(-|\\+)?\\d+"));
7     }
8 }

输出:

true
true
false
true

本例中前两个字符串对应的正则表达式,匹配成功。第三个字符串开头有一个“+”,他也是一个整数,但与正则表达式却不匹配,所以应该用第四个正则描述:

(-|\\+)? :表示可能有一个“+”或“-”或无符号开头。其中"()"表示分组,"|"表示或。因为"+"在正则表达式中有着特殊的含义,所以必须使用\\进行转义成一个普通字符。

3、split()方法,String类自带一个非常有用的正则表达式工具--split()方法,其功能是将字符串从正则表达式匹配的地方切开。

 1 public class Splitting {
 2     public static String str =
 3             "Then, when you have found the shrubbery, you must " +
 4             "cut down the mightiest tree in the forest... " +
 5             "with... a herring!";
 6     public static void split(String regex){
 7         System.out.println(Arrays.toString(str.split(regex)));
 8     }
 9     public static void main(String[] args) {
10         split(" ");
11         split("\\W+");
12         split("n\\W+");
13     }
14 }

输出:

[Then,, when, you, have, found, the, shrubbery,, you, must, cut, down, the, mightiest, tree, in, the, forest..., with..., a, herring!]
[Then, when, you, have, found, the, shrubbery, you, must, cut, down, the, mightiest, tree, in, the, forest, with, a, herring]
[The, whe, you have found the shrubbery, you must cut dow, the mightiest tree i, the forest... with... a herring!]

  首先看第一个语句,按空格划分字符串。

  第二个和第三个都有用到了\W (非单词字符),通过第二个可以看到,它将标点字符删除了。第三个表示"字母n后面跟着一个或者多个非单词字符",可以看到,在原始字符中,与正则表达式匹配的部分,在最终的结果中都不存在了。

  String.split()还有一个重载的版本,增加了限制字符串分割次数的参数。

4、替换方法,String类自带的最后一个正则表达式工具是"替换"。可以选择只替换正则表达式第一匹配的字串也可以替换所有匹配的地方。

1 public class Replacing {
2     static String s = Splitting.str;//接上个类Splitting
3     public static void main(String[] args) {
4         System.out.println(s.replaceFirst("f\\w+", "located"));//替换第一个匹配成功的字串
5         System.out.println(s.replaceAll("shrubbery|tree|herring", "banana"));//替换所有匹配成功的字串
6     }
7 }

输出:

Then, when you have located the shrubbery, you must cut down the mightiest tree in the forest... with... a herring!
Then, when you have found the banana, you must cut down the mightiest banana in the forest... with... a banana!

  第一个表达式匹配以字母f开头,后面跟一个或多个字母。只替换第一匹配的部分,所以"found"被替换成"located"。

  第二个表达式要匹配的是三个单词中的任意一个,并替换掉所有匹配的部分。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏闻道于事

JavaScript之语句,循环

JavaScript中语句主要分为三类:顺序,分支,循环。 1.顺序语句: 按照循序依次执行,最普通常见的语句,这里不多赘述。 其结构如下 ? 2.分支语句: ...

2307
来自专栏和蔼的张星的图像处理专栏

407. 加一加和进位分开处理

给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。 该数字按照大小进行排列,最大的数在列表的最前面。 样例 给定 [1,2,3] 表...

661
来自专栏北京马哥教育

一篇搞定Python正则表达式

1. 正则表达式语法 1.1 字符与字符类     1 特殊字符:.^$?+*{}[]()|       以上特殊字符要想使用字面值,必须使用进行转义    ...

3276
来自专栏221-B

python正则表达式的部分特殊符号

\w - 匹配字母或数字或下划线或汉字(3.x版本可以匹配汉字,但2.x版本不可以) \s - 匹配任意的空白符 \b - 在正则表达式中表示单词的开头或结尾,...

751
来自专栏北京马哥教育

Python Re 模块最全解读: 11703 字帮你彻底掌握

re模块下的函数 compile(pattern):创建模式对象 import re pat=re.compile('A') m=pat.search('CBA...

31810
来自专栏小古哥的博客园

正则表达式

特殊符号(使用需要'\'转义) ! $ ^ * + = | . ? \ / ( ) [ ] { } 创建正则表达式 方法一  var re =new RegEx...

3415
来自专栏Java进阶之路

java中常用正则表达式

1513
来自专栏前端架构

JS正则表达式详解

[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 

651
来自专栏赵俊的Java专栏

Python 数据类型

1413
来自专栏Bingo的深度学习杂货店

Q38 Count and Say

The count-and-say sequence is the sequence of integers with the first five terms...

3387

扫码关注云+社区