轻松学会JAVA中的正则表达式

合集下载

java空格的正则表达式

java空格的正则表达式

java空格的正则表达式Java正则表达式是一种强大的工具,用于在字符串中匹配特定的模式。

本文将介绍如何使用正则表达式来匹配和处理包含空格的字符串。

让我们了解一下正则表达式中的空格符号。

在Java中,空格可以用空格字符“\s”来表示。

这个字符可以匹配任意的空白字符,包括空格、制表符、换行符等。

下面是一些常用的正则表达式示例:1. 匹配一个或多个空格:\s+这个表达式可以匹配连续的一个或多个空格字符。

2. 匹配零个或多个空格:\s*这个表达式可以匹配任意数量的空格字符,包括零个。

3. 匹配一个空格:\s这个表达式可以匹配一个空格字符。

4. 匹配特定数量的空格:\s{n}这个表达式可以匹配恰好n个空格字符。

接下来,让我们来看几个使用正则表达式匹配空格的实际例子。

例1:判断字符串是否包含空格```javaString str = "Hello World";boolean containsSpace = str.matches(".*\\s.*");System.out.println(containsSpace);```这段代码会输出true,因为字符串"Hello World"中包含了一个空格。

例2:替换字符串中的空格```javaString str = "Hello World";String replacedStr = str.replaceAll("\\s+", "-");System.out.println(replacedStr);```这段代码会输出"Hello-World",因为它用"-"替换了字符串中的所有空格。

例3:切割包含空格的字符串```javaString str = "Java is a programming language";String[] words = str.split("\\s+");for (String word : words) {System.out.println(word);}```这段代码会将字符串切割成多个单词,并逐个输出:```Javaisprogramminglanguage```除了上述示例外,正则表达式还可以用于匹配更复杂的模式。

java 正则规则

java 正则规则

java 正则规则正则表达式是计算机语言的一种规则,它用一系列的字符或字符集合来描述或匹配字符串。

Java 字符串类库中包含了正则表达式的相关类,使得在 Java 编程中使用正则表达式非常方便。

接下来,我们将通过以下几个步骤来学习如何在 Java 中使用正则表达式。

1. 创建正则表达式在 Java 中,我们使用字符串来表示正则表达式。

例如:String pattern = "^[a-zA-Z]\\w{5,17}$"。

这个简单的正则表达式用来判定一个字符串是否为合法的用户名,要求这个用户名必须由小写、大写字母和数字组成,长度必须在6到18位之间。

2. 利用 Pattern 类创建 Pattern 对象在使用正则表达式时,首先需要创建一个 Pattern 对象,其实现方式非常简单:String pattern = "^\\d{3}-\\d{2}-\\d{4}$";Pattern r = pile(pattern);同样地,创建 Pattern 对象的过程也可以通过直接调用Pattern 类的 compile() 方法来完成。

3. 利用 Matcher 类匹配一旦创建了 Pattern 对象,就可以使用 Matcher 类来进行匹配。

Matcher 类提供了很多用于检测匹配的方法,其中最常见的就是find() 和 group() 方法。

如下:String pattern = "foo";String input = "foo bar baz";Pattern p = pile(pattern);Matcher m = p.matcher(input);while (m.find()) {System.out.println(m.group());}4. 其他相关方法Matcher 类中还有一些其他的方法,我们需要了解它们的用途,才能更好地使用正则表达式。

java 正则表达语法

java 正则表达语法

java 正则表达语法Java正则表达式语法是一种用于在Java中处理字符串的强大工具。

以下是一些基本的Java正则表达式语法:1. 字符类(Character Classes):方括号[]内的字符集合,表示匹配方括号内的任意一个字符。

例如,`[abc]`可以匹配"a"、"b"或"c"。

2. 特殊字符:许多字符在正则表达式中有特殊含义。

例如,`.`表示任意字符,``表示前面的字符可以出现0次或多次,`^`表示行的开始,`$`表示行的结束。

3. 预定义的模式:例如,`\d`匹配任何数字,`\D`匹配任何非数字字符。

4. 数量词:例如,``表示前面的元素可以出现0次或多次,`+`表示前面的元素出现一次或多次,`?`表示前面的元素出现0次或1次。

5. 分组:通过括号()可以将多个元素组合成一个单元,这个单元可以有自己的数量词。

例如,`(ab)`可以匹配"ab"重复0次或多次。

6. 选择、交替和引用:通过``可以选择一个或多个模式,通过``可以交替(即匹配这个或那个),通过`\n`可以引用前面模式中的n。

7. 边界:例如,`\b`表示单词边界,`\B`表示非单词边界。

8. 否定:通过在方括号前加上一个`^`可以否定这个字符集。

例如,`[^abc]`表示不匹配"a"、"b"或"c"。

9. 贪婪与非贪婪匹配:默认情况下,数量词是贪婪的,即尽可能多地匹配。

可以通过在数量词后面加上一个问号(`?`)来改变这个行为,使其变为非贪婪的。

以下是一些Java正则表达式的示例:`\d+`:匹配一个或多个数字`\D+`:匹配一个或多个非数字字符`[a-z]+`:匹配一个或多个小写字母`[A-Z]+`:匹配一个或多个大写字母`[a-zA-Z]+`:匹配一个或多个字母(不论大小写)`[a-zA-Z0-9]+`:匹配一个或多个字母或数字`^[\w\.-]+[\w\.-]+\.\w+$`:匹配一个有效的电子邮件地址这只是Java正则表达式语法的一小部分。

java正则表达式的用法

java正则表达式的用法

java正则表达式的用法正则表达式是一种强大的字符串匹配工具,它可以用来在文本中搜索、匹配、替换特定的模式。

Java中的正则表达式是通过java.util.regex包提供的类来实现的。

下面介绍几种常见的Java正则表达式的用法。

1. 匹配字符串使用正则表达式可以快速判断一个字符串是否满足特定的模式。

可以使用`matches`方法来实现。

例如,判断一个字符串是否由数字组成可以使用如下代码:```javaString pattern = "\\d+";String input = "12345";if (input.matches(pattern)) {System.out.println("匹配成功");} else {System.out.println("不匹配");}```上述代码中,`\\d+`表示一个或多个数字,`matches`方法返回值为布尔类型,如果匹配成功,则返回`true`,否则返回`false`。

2. 提取字符串通过正则表达式可以提取出文本中满足特定模式的字符串。

可以使用`Pattern`类和`Matcher`类来实现。

例如,提取出一个字符串中所有的邮箱地址,可以使用如下代码:```javaString pattern = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b";Stringinput="Email:****************,Contact:*******************";Pattern emailPattern = pile(pattern);Matcher matcher = emailPattern.matcher(input);while (matcher.find()) {String email = matcher.group();System.out.println("匹配到的邮箱地址:" + email);}```上述代码中,`\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b`表示匹配邮箱地址的正则表达式,`find`方法会查找所有匹配的字符串,然后通过`group`方法获取匹配到的字符串。

java正则表达式教程

java正则表达式教程

java正则表达式教程正则表达式(Regular Expression)是一种描述字符串模式的工具,可以用于匹配、搜索和替换文本。

在Java中,可以使用java.util.regex包提供的类来处理正则表达式。

首先需要了解的是正则表达式的元字符,它们用于描述匹配的规则。

一些常用的元字符包括:- . :匹配任意字符;- \w :匹配字母、数字、下划线;- \d :匹配数字;- \s :匹配空白字符;- \b :匹配单词边界。

除了元字符,还有一些特殊字符需要转义,例如+、 *、 ? 等。

在Java中,可以使用Pattern类来编译正则表达式,并使用Matcher类对字符串进行匹配。

下面是一个简单的例子:```javaimport java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "Hello,123 World!";String pattern = "\\w+"; // 匹配一个或多个字母、数字、下划线Pattern p = pile(pattern);Matcher m = p.matcher(text);while (m.find()) {System.out.println(m.group()); // 输出匹配到的字符串}}}```上述代码输出的结果是:```Hello123World```通过Pattern类的compile方法可以将正则表达式编译成模式,然后通过Matcher类的matcher方法可以在给定的字符串中查找匹配的内容。

使用find方法可以一次查找一个匹配项,使用group方法可以获取匹配到的字符串。

除了基本的匹配方式,正则表达式还可以进行分组、选择、数量限制等操作,使得匹配更加灵活。

总而言之,正则表达式在Java中是一个强大且常用的工具。

java中正则表达式语法

java中正则表达式语法

java中正则表达式语法Java中的正则表达式语法遵循POSIX标准,具有一些特殊的字符和元字符。

以下是一些常用的Java正则表达式语法:1. 匹配单个字符:`.`:匹配除换行符之外的任何单个字符。

`\d`:匹配任何数字,等价于`[0-9]`。

`\D`:匹配任何非数字字符。

`\w`:匹配任何字母、数字或下划线字符,等价于`[a-zA-Z0-9_]`。

`\W`:匹配任何非字母、数字或下划线字符。

2. 匹配字符串:`^`:匹配输入字符串的开始位置。

`$`:匹配输入字符串的结束位置。

3. 数量词:``:匹配前一个字符0次或多次。

`+`:匹配前一个字符1次或多次。

`?`:匹配前一个字符0次或1次。

`{n}`:精确匹配前一个字符n次。

`{n,}`:匹配前一个字符n次或多次。

`{n,m}`:匹配前一个字符至少n次,但不超过m次。

4. 选择、分组和引用:``:匹配两个模式中的任意一个。

`( )`:将几个项组合在一起,表示一个整体。

`\n`:在正则表达式中,将n替换为模式中的第n个分组。

5. 预定义模式:`\0`:匹配NULL字符。

`\n`:匹配换行符。

`\r`:匹配回车符。

`\t`:匹配制表符。

6. 修饰符:`i`:使匹配对大小写不敏感。

`m`:多行模式,使`^`和`$`分别匹配每一行的开始和结束位置。

`s`:使`.`能匹配换行符。

`u`:将模式视为Unicode模式,启用对Unicode字符的完整支持。

`x`:使模式中的空白字符被忽略,并允许使用注释。

这只是一些常用的Java正则表达式语法,还有更多高级的用法等待你去探索。

java正则表达式

java正则表达式

java正则表达式⼀、校验数字的表达式1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 ⾄少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和⾮零开头的数字:^(0|[1-9][0-9]*)$6 ⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位⼩数的正数或负数:^(\-)?\d+(\.\d{1,2})?$8 正数、负数、和⼩数:^(\-|\+)?\d+(\.\d+)?$9 有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$10 有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$11 ⾮零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$12 ⾮零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$13 ⾮负整数:^\d+$ 或 ^[1-9]\d*|0$14 ⾮正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$15 ⾮负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$16 ⾮正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$⼆、校验字符的表达式1 汉字:^[\u4e00-\u9fa5]{0,}$2 英⽂和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$3 长度为3-20的所有字符:^.{3,20}$4 由26个英⽂字母组成的字符串:^[A-Za-z]+$5 由26个⼤写英⽂字母组成的字符串:^[A-Z]+$6 由26个⼩写英⽂字母组成的字符串:^[a-z]+$7 由数字和26个英⽂字母组成的字符串:^[A-Za-z0-9]+$8 由数字、26个英⽂字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$9 中⽂、英⽂、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$10 中⽂、英⽂、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$11 可以输⼊含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+12 禁⽌输⼊含有~的字符:[^~\x22]+三、特殊需求表达式1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?4 ⼿机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$6 国内电话号码(0511-*******、021-********):\d{3}-\d{8}|\d{4}-\d{7}7 ⾝份证号(15位、18位数字):^\d{15}|\d{18}$8 短⾝份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$11 强密码(必须包含⼤⼩写字母和数字的组合,不能使⽤特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$12 ⽇期格式:^\d{4}-\d{1,2}-\d{1,2}13 ⼀年的12个⽉(01~09和1~12):^(0?[1-9]|1[0-2])$14 ⼀个⽉的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$15 钱的输⼊格式:16 1.有四种钱的表⽰形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$17 2.这表⽰任意⼀个不以0开头的数字,但是,这也意味着⼀个字符"0"不通过,所以我们采⽤下⾯的形式:^(0|[1-9][0-9]*)$18 3.⼀个0或者⼀个不以0开头的数字.我们还可以允许开头有⼀个负号:^(0|-?[1-9][0-9]*)$19 4.这表⽰⼀个0或者⼀个可能为负的开头不为0的数字.让⽤户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下⾯我们要加的是说明可能的⼩数部分:^[0-9]+(.[0-9]+)?$20 5.必须说明的是,⼩数点后⾯⾄少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$21 6.这样我们规定⼩数点后⾯必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$22 7.这样就允许⽤户只写⼀位⼩数.下⾯我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$23 8.1到3个数字,后⾯跟着任意个逗号+3个数字,逗号成为可选,⽽不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$24 备注:这就是最终结果了,别忘了"+"可以⽤"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在⽤函数时去掉去掉那个反斜杠,⼀般的错误都在这⾥25 xml⽂件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$26 中⽂字符的正则表达式:[\u4e00-\u9fa5]27 双字节字符:[^\x00-\xff] (包括汉字在内,可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1))28 空⽩⾏的正则表达式:\n\s*\r (可以⽤来删除空⽩⾏)29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (⽹上流传的版本太糟糕,上⾯这个也仅仅能部分,对于复杂的嵌套标记依旧⽆能为⼒)30 ⾸尾空⽩字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式)31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字) 33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有⽤) 34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))20个正则表达式必知(能让你少写1,000⾏代码)正则表达式(regular expression)描述了⼀种字符串匹配的模式,可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串做替换或者从某个串中取出符合某个条件的⼦串等。

java 正则表达式 条件语法

java 正则表达式 条件语法

java 正则表达式条件语法Java 正则表达式条件语法正则表达式是一种强大的工具,用于匹配和处理字符串。

在 Java 中,我们可以使用正则表达式来快速有效地处理各种字符串操作。

本文将介绍 Java 中正则表达式的条件语法,包括一些常用的语法规则和用法。

1. 字符匹配正则表达式的基本语法是用特殊字符或字符组合来表示一种模式。

最简单的正则表达式就是匹配单个字符。

例如,表达式"a"将匹配字符串中的所有"a"字符。

2. 字符类字符类是用来匹配一组字符的语法。

使用方括号[] 来表示字符类,其中可以包含多个字符或字符范围。

例如,表达式"[abc]"将匹配字符串中的任意一个字符,即"a"、"b"或"c"。

而表达式"[a-z]"将匹配所有小写字母。

3. 限定符限定符是用来指定匹配字符的数量的语法。

常用的限定符包括:- *:匹配前面的字符零次或多次。

- +:匹配前面的字符一次或多次。

- ?:匹配前面的字符零次或一次。

- {n}:匹配前面的字符恰好 n 次。

- {n,}:匹配前面的字符至少 n 次。

- {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。

例如,表达式"a*b"将匹配零个或多个连续的"a",后面紧跟着一个"b"。

4. 边界匹配边界匹配是用来指定匹配位置的语法。

常用的边界匹配符包括:- ^:匹配字符串的开头位置。

- $:匹配字符串的末尾位置。

- \b:匹配单词的边界位置。

例如,表达式"^a"将匹配以"a" 开头的字符串,而表达式"b$"将匹配以 "b" 结尾的字符串。

5. 分组和捕获分组和捕获是用来提取匹配的子字符串的语法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

正则表达式是JA V A语言中比较困难的内容我从网上找了一篇很不错的文章愿与大家分享共同进步内容如下:正则表达式之道原著:Steve Mansoursman@Revised: June 5, 1999(copied by jm /at/ from /%7esman/regexp.htm, after the original disappeared! )翻译:Neo Leeneo.lee@2004年10月16日英文版原文译者按:原文因为年代久远,文中很多链接早已过期(主要是关于vi、sed等工具的介绍和手册),本译文中已将此类链接删除,如需检查这些链接可以查看上面链接的原文。

除此之外基本照原文直译,括号中有“译者按”的部分是译者补充的说明。

如有内容方面的问题请直接和Steve Mansor联系,当然,如果你只写中文,也可以和我联系。

目录什么是正则表达式范例简单中级(神奇的咒语)困难(不可思议的象形文字)不同工具中的正则表达式什么是正则表达式一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。

很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。

正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的V isual C++这种交互式IDE也开始支持它了。

我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi 中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。

你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子。

还有一个关于vi中文本替换命令(s)的简单说明附在文后供参考。

正则表达式基础正则表达式由一些普通字符和一些元字符(metacharacters)组成。

普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。

在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。

例如,正则表达式\"testing\"中没有包含任何元字符,,它可以匹配\"testing\"和\"123testing\"等字符串,但是不能匹配\"Testing\"。

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。

下表列出了所有的元字符和对它们的一个简短的描述。

元字符描述. 匹配任何单个字符。

例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。

$ 匹配行结束符。

例如正则表达式weasel$ 能够匹配字符串\"He&#39;s a weasel\"的末尾,但是不能匹配字符串\"They are a bunch of weasels.\"。

^ 匹配一行的开始。

例如正则表达式^When in能够匹配字符串\"When in the course of human events\"的开始,但是不能匹配\"What and When in the\"。

* 匹配0或多个正好在它之前的那个字符。

例如正则表达式.*意味着能够匹配任意数量的任何字符。

\\ 这是引用府,用来将这里列出的这些元字符当作普通的字符来进行匹配。

例如正则表达式\\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\\.用来匹配点字符,而不是任何字符的通配符。

[ ][c1-c2][^c1-c2] 匹配括号中的任何一个字符。

例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。

可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。

另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z] 将匹配除了2、6、9和所有大写字母之外的任何字符。

\\< \\> 匹配词(word)的开始(\\<)和结束(\\>)。

例如正则表达式\\<the能够匹配字符串\"for the wise\"中的\"the\",但是不能匹配字符串\"otherwise\"中的\"the\"。

注意:这个元字符不是所有的软件都支持的。

\\( \\) 将\\( 和\\) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用\\1 到\\9 的符号来引用。

| 将两个匹配条件进行逻辑“或”(Or)运算。

例如正则表达式(him|her) 匹配\"it belongs to him\"和\"it belongs to her\",但是不能匹配\"it belongs to them.\"。

注意:这个元字符不是所有的软件都支持的。

+ 匹配1或多个正好在它之前的那个字符。

例如正则表达式9+匹配9、99、999等。

注意:这个元字符不是所有的软件都支持的。

? 匹配0或1个正好在它之前的那个字符。

注意:这个元字符不是所有的软件都支持的。

\\{i\\}\\{i,j\\} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。

例如正则表达式A[0-9]\\{3\\} 能够匹配字符\"A\"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。

而正则表达式[0-9]\\{4,6\\} 匹配连续的任意4个、5个或者6个数字字符。

注意:这个元字符不是所有的软件都支持的。

最简单的元字符是点,它能够匹配任何单个字符(注意不包括新行符)。

假定有个文件test.txt 包含以下几行内容:he is a rathe is in a rutthe food is RottenI like root beer我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。

命令grep r.t test.txt在test.txt文件中的每一行中搜索正则表达式r.t,并打印输出匹配的行。

正则表达式r.t匹配一个r接着任何一个字符再接着一个t。

所以它将匹配文件中的rat和rut,而不能匹配Rotten 中的Rot,因为正则表达式是大小写敏感的。

要想同时匹配大写和小写字母,应该使用字符区间元字符(方括号)。

正则表达式[Rr]能够同时匹配R和r。

所以,要想匹配一个大写或者小写的r接着任何一个字符再接着一个t就要使用这个表达式:[Rr].t。

要想匹配行首的字符要使用抑扬字符(^)——又是也被叫做插入符。

例如,想找到text.txt 中行首\"he\"打头的行,你可能会先用简单表达式he,但是这会匹配第三行的the,所以要使用正则表达式^he,它只匹配在行首出现的h。

有时候指定“除了×××都匹配”会比较容易达到目的,当抑扬字符(^)出现在方括号中是,它表示“排除”,例如要匹配he ,但是排除前面是t or s的情性(也就是the和she),可以使用:[^st]he。

可以使用方括号来指定多个字符区间。

例如正则表达式[A-Za-z]匹配任何字母,包括大写和小写的;正则表达式[A-Za-z][A-Za-z]* 匹配一个字母后面接着0或者多个字母(大写或者小写)。

当然我们也可以用元字符+做到同样的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等价。

但是要注意元字符+ 并不是所有支持正则表达式的程序都支持的。

关于这一点可以参考后面的正则表达式语法支持情况。

要指定特定数量的匹配,要使用大括号(注意必须使用反斜杠来转义)。

想匹配所有100和1000的实例而排除10和10000,可以使用:10\\{2,3\\},这个正则表达式匹配数字1后面跟着2或者3个0的模式。

在这个元字符的使用中一个有用的变化是忽略第二个数字,例如正则表达式0\\{3,\\} 将匹配至少3个连续的0。

简单的例子这里有一些有代表性的、比较简单的例子。

vi 命令作用:%s/ */ /g 把一个或者多个空格替换为一个空格。

:%s/ *$// 去掉行尾的所有空格。

:%s/^/ / 在每一行头上加入一个空格。

:%s/^[0-9][0-9]* // 去掉行首的所有数字字符。

:%s/b[aeio]g/bug/g 将所有的bag、beg、big和bog改为bug。

:%s/t\\([aou]\\)g/h\\1t/g 将所有tag、tog和tug分别改为hat、hot和hug(注意用group的用法和使用\\1引用前面被匹配的字符)。

中级的例子(神奇的咒语)例1将所有方法foo(a,b,c)的实例改为foo(b,a,c)。

这里a、b和c可以是任何提供给方法foo()的参数。

也就是说我们要实现这样的转换:之前之后foo(10,7,2) foo(7,10,2)foo(x+13,y-2,10) foo(y-2,x+13,10)foo( bar(8), x+y+z, 5) foo( x+y+z, bar(8), 5)下面这条替换命令能够实现这一魔法::%s/foo(\\([^,]*\\),\\([^,]*\\),\\([^)]*\\))/foo(\\2,\\1,\\3)/g现在让我们把它打散来加以分析。

写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。

第一个参数是用这个表达式来识别的::\\([^,]*\\),我们可以从里向外来分析它:[^,] 除了逗号之外的任何字符[^,]* 0或者多个非逗号字符\\([^,]*\\) 将这些非逗号字符标记为\\1,这样可以在之后的替换模式表达式中引用它\\([^,]*\\), 我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。

相关文档
最新文档