信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索

Java JDK正则表达和多方法实例教程

查看数: 2129 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-10-8 14:18

正文摘要:

本文是Jan Goyvaerts为RegexBuddy写的教程的译文,下面来看吧!1. 什么是正则表达式基本说来,正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express。本文将用<<regex>>来表示一段具体的 ...

回复

宣传软件 发表于 2016-10-8 14:18:58
实例教程2

这些问题也肯定是很多朋友在关心的,所以我就给大家谈谈这个!

一、概述

正则表达式是Java处理字符串、文本的重要工具。

Java对正则表达式的处理集中在以下两个两个类:

java.util.regex.Matcher   模式类:用来表示一个编译过的正则表达式。

java.util.regex.Pattern   匹配类:用模式匹配一个字符串所表达的抽象结果。

(新版的Java Doc有解释。)

比如一个简单例子:

Java代码

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegxOperator {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Pattern p = Pattern.compile("f(.+?)k");

Matcher m = p.matcher("fckfkkfkf");

while (m.find()) {

String s0 = m.group();

String s1 = m.group(1);

System.out.println(s0 + "||" + s1);

}

System.out.println("---------");

m.reset("fucking!");

while (m.find()) {

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

}

Pattern p1 = Pattern.compile("f(.+?)i(.+?)h");

Matcher m1 = p1.matcher("finishabigfishfrish");

while (m1.find()) {

String s0 = m1.group();

String s1 = m1.group(1);

String s2 = m1.group(2);

System.out.println(s0 + "||" + s1 + "||" + s2);

}

System.out.println("---------");

Pattern p3 = Pattern

.compile("(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])");

Matcher m3 = p3

.matcher("1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31");

while (m3.find()) {

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

}

}

}

输出结果:

fck||c

fkk||k

---------

fuck

finish||in||s

fishfrish||ishfr||s

---------

1900-01-01

2007/08/13

1900.01.01

1900 01 01

1900 02 31

Java代码

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Test {

public static void main(String args[]) {

String rawDate = "1900-01-01 2007/08/13 1900.01.01 1900 01 01 1900-01.01 1900 13 01 1900 02 31";

String patternStr = "(\d{4})[- /.](\d{2})[- /.](\d{2})";

Pattern pattern = Pattern.compile(patternStr);

Matcher matcher = pattern.matcher(rawDate);

while(matcher.find()){

System.out.println("full date is " + matcher.group());

System.out.println("year is " + matcher.group(1));

System.out.println("month is " + matcher.group(2));

System.out.println("date is " + matcher.group(3));

}

}

}

full date is 1900-01-01

year is 1900

month is 01

date is 01

full date is 2007/08/13

year is 2007

month is 08

date is 13

full date is 1900.01.01

year is 1900

month is 01

date is 01

full date is 1900 01 01

year is 1900

month is 01

date is 01

full date is 1900-01.01

year is 1900

month is 01

date is 01

full date is 1900 13 01

year is 1900

month is 13

date is 01

full date is 1900 02 31

year is 1900

month is 02

date is 31

二、一些容易迷糊的问题

1、Java对反斜线处理的问题

在其他语言中,\表示要插入一个字符;

在Java语言中,\表示要插入正则表达式的反斜线,并且后面的字符有特殊意义。

看API文档:

预定义字符类

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

d 数字:[0-9]

D 非数字: [^0-9]

s 空白字符:[ x0Bf ]

S 非空白字符:[^s]

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

W 非单词字符:[^w]

但是看看上面程序,对比下不难看出:

d在实际使用的时候就写成了 \d;

在Java正则表达式中,如果要插入一个字符,则需要在正则表达式中写成\\,原因是下面的APIDoc定义\表示一个反斜线。

但是如果在正则表示式中表示回车换行等,则不需要多添加反斜线了。比如回车 就写作 .

字符

x 字符 x

\ 反斜线字符

n 带有八进制值 0 的字符 n (0 <= n <= 7)

nn 带有八进制值 0 的字符 nn (0 <= n <= 7)

mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)

xhh 带有十六进制值 0x 的字符 hh

uhhhh 带有十六进制值 0x 的字符 hhhh

制表符 ('u0009')

新行(换行)符 ('u000A')

回车符 ('u000D')

f 换页符 ('u000C')

a 报警 (bell) 符 ('u0007')

e 转义符 ('u001B')

cx 对应于 x 的控制符

2、Matcher.find():尝试查找与模式匹配的字符序列的下一个子序列。此方法从字符序列的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始,即如果前一次找到与模式匹配的子序列则这次从这个子序列后开始查找。

3、Matcher.matchers():判断整个字符序列与模式是否匹配。当连续用Matcher对象检查多个字符串时候,可以使用

Matcher.reset():重置匹配器,放弃其所有显式状态信息并将其添加位置设置为零。

或者Matcher.reset(CharSequence input)  重置此具有新输入序列的匹配器。

来重复使用匹配器。

4、组的概念,这个概念很重要,组是用括号划分的正则表达式,可以通过编号来引用组。组号从0开始,有几对小括号就表示有几个组,并且组可以嵌套,组号为0的表示整个表达式,组号为1的表示第一个组,依此类推。

例如:A(B)C(D)E正则式中有三组,组0是ABCDE,组1是B,组2是D;

A((B)C)(D)E正则式中有四组:组0是ABCDE,组1是BC,组2是B;组3是C,组4是D。

int groupCount():返回匹配其模式中组的数目,不包括第0组。

String group():返回前一次匹配操作(如find())的第0组。

String group(int group):返回前一次匹配操作期间指定的组所匹配的子序列。如果该匹配成功,但指定组未能匹配字符序列的任何部分,则返回 null。

int start(int group):返回前一次匹配操作期间指定的组所匹配的子序列的初始索引。

int end(int group):返回前一次匹配操作期间指定的组所匹配的子序列的最后索引+1。

5、匹配的范围的控制

最变态的就要算lookingAt()方法了,名字很让人迷惑,需要认真看APIDoc。

start()  返回以前匹配的初始索引。

end()  返回最后匹配字符之后的偏移量。

public boolean lookingAt()尝试将从区域开头开始的输入序列与该模式匹配。

与 matches 方法类似,此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。

如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。

返回:

当且仅当输入序列的前缀匹配此匹配器的模式时才返回 true。


QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2024-11-16 05:12 , Processed in 0.201327 second(s), 45 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表