当前位置:首页 » 编程语言 » javaregex

javaregex

发布时间: 2025-01-29 21:54:42

java.util.regex中的pattern 和 matcher的用法

Pattern和Matcher是Java中用于处理正则表达式的类。Pattern代表编译后的正则表达式模式,而Matcher则用于执行匹配操作。

首先,通过Pattern类的实例化,可以创建一个匹配模式。例如,使用"[a-z]{3}"作为模式,表示匹配三个连续的小写字母的字符串。然后,通过调用Pattern的静态方法matches或compile方法,可以得到一个Matcher对象。

String类提供了matches方法,可以用来直接检查字符串是否完全匹配给定的正则表达式。例如:

String s = "abc";
boolean b = s.matches("[a-z]{3}");
System.out.println(b);

这将返回true,因为"abc"确实匹配三个连续的小写字母的模式。

另外,通过Pattern类的matches方法也可以实现同样的功能:

boolean b = Pattern.matches("[a-z]{3}", "abc");
System.out.println(b);

同样会输出true。

Matcher类提供了更强大的匹配功能。首先使用compile方法编译模式:

Pattern p = Pattern.compile("[a-z]{3}");
Matcher m = p.matcher("acc");

然后使用Matcher的matches方法来检查整个字符串是否匹配:

boolean b = m.matches();
System.out.println(b);

这将返回false,因为"acc"虽然包含三个连续的小写字母,但并不完全匹配。

需要注意的是,matches方法会检查整个字符串是否完全匹配,而find方法则用于查找字符串中匹配的部分:

boolean b = m.find();
System.out.println(b);

这将返回true,因为"acc"中包含匹配的部分。

㈡ 如何使用java.util.regex包

在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。
可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。

正则表达式的引擎已被许多普通的Unix工具所实现,包括grep,awk,vi和Emacs等。此外,许多使用比较广泛的脚本语言也支持正则表达式,比如Python,Tcl,JavaScript,以及最着名的Perl。

我很早以前就是个Perl方面的黑客,如果你和我一样话,你也会非常依赖你手边的这些强大的text-munging工具。近几年来,像其他程序开发者一样,我也越来越关注Java的开发。

Java作为一种开发语言,有许多值得推荐的地方,但是它一直以来没有自带对正则表达式的支持。直到最近,借助于第三方的类库,Java开始支
持正则表达式,但这些第三方的类库都不一致、兼容性差,而且维护代码起来很糟糕。这个缺点,对我选择Java作为首要的开发工具来说,一直是个巨大的顾虑
之处。

你可以想象,当我知道Sun的Java JDK
1.40版本包含了java.util.regex(一个完全开放、自带的正则表达式包)时,是多么的高兴!很搞笑的说,我花好些时间去挖掘这个被隐藏起
来的宝石。我非常惊奇的是,Java这样的一个很大改进(自带了java.util.regex包)为什么不多公开一点呢?!

最近,Java双脚都跳进了正则表达式的世界。java.util.regex包在支持正则表达也有它的过人之处,另外Java也提供详细的相
关说明文档。使得朦朦胧胧的regex神秘景象也慢慢被拨开。有一些正则表达式的构成(可能最显着的是,在于糅合了字符类库)在Perl都找不到。

在regex包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。Pattern类是用来表达和陈述所要搜索模式的对
象,Matcher类是真正影响搜索的对象。另加一个新的例外类,PatternSyntaxException,当遇到不合法的搜索模式时,会抛出例
外。

即使对正则表达式很熟悉,你会发现,通过java使用正则表达式也相当简单。要说明的一点是,对那些被Perl的单行匹配所宠坏的Perl狂热爱好者来说,在使用java的regex包进行替换操作时,会比他们所以前常用的方法费事些。

本文的局限之处,它不是一篇正则表达式用法的完全教程。如果读者要对正则表达进一步了解的话,推荐阅读Jeffrey
Frieldl的Mastering Regular
Expressions,该书由O’Reilly出版社出版。我下面就举一些例子来教读者如何使用正则表达式,以及如何更简单地去使用它。

设计一个简单的表达式来匹配任何电话号码数字可能是比较复杂的事情,原因在于电话号码格式有很多种情况。所有必须选择一个比较有效的模式。比如:(212) 555-1212, 212-555-1212和212 555 1212,某些人会认为它们都是等价的。

首先让我们构成一个正则表达式。为简单起见,先构成一个正则表达式来识别下面格式的电话号码数字:(nnn)nnn-nnnn。

第一步,创建一个pattern对象来匹配上面的子字符串。一旦程序运行后,如果需要的话,可以让这个对象一般化。匹配上面格式的正则表达可以
这样构成:(\d{3})\s\d{3}-\d{4},其中\d单字符类型用来匹配从0到9的任何数字,另外{3}重复符号,是个简便的记号,用来表示有
3个连续的数字位,也等效于(\d\d\d)。\s也另外一个比较有用的单字符类型,用来匹配空格,比如Space键,tab键和换行符。

是不是很简单?但是,如果把这个正则表达式的模式用在java程序中,还要做两件事。对java的解释器来说,在反斜线字符
(\)前的字符有特殊的含义。在java中,与regex有关的包,并不都能理解和识别反斜线字符(\),尽管可以试试看。但为避免这一点,即为了让反斜
线字符(\)在模式对象中被完全地传递,应该用双反斜线字符(\)。此外圆括号在正则表达中两层含义,如果想让它解释为字面上意思(即圆括号),也需要在
它前面用双反斜线字符(\\)。也就是像下面的一样:

\\(\\d{3}\\)\\s\\d{3}-\\d{4}

现在介绍怎样在java代码中实现刚才所讲的正则表达式。要记住的事,在用正则表达式的包时,在你所定义的类前需要包含该包,也就是这样的一行:

import java.util.regex.*;

下面的一段代码实现的功能是,从一个文本文件逐行读入,并逐行搜索电话号码数字,一旦找到所匹配的,然后输出在控制台。

BufferedReader in;

Pattern pattern = Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");

in = new BufferedReader(new FileReader("phone"));

String s;

while ((s = in.readLine()) != null)

{

Matcher matcher = pattern.matcher(s);

if (matcher.find())

{

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

}

}

in.close();

对那些熟悉用Python或Javascript来实现正则表达式的人来说,这段代码很平常。在Python和Javascript这些语言
中,或者其他的语言,这些正则表达式一旦明确地编译过后,你想用到哪里都可以。与Perl的单步匹配相比,看起来多多做了些工作,但这并不很费事。

find()方法,就像你所想象的,用来搜索与正则表达式相匹配的任何目标字符串,group()方法,用来返回包含了所匹配文本的字符串。应
注意的是,上面的代码,仅用在每行只能含有一个匹配的电话号码数字字符串时。可以肯定的说,java的正则表达式包能用在一行含有多个匹配目标时的搜索。
本文的原意在于举一些简单的例子来激起读者进一步去学习java自带的正则表达式包,所以对此就没有进行深入的探讨。

这相当漂亮吧! 但是很遗憾的是,这仅是个电话号码匹配器。很明显,还有两点可以改进。如果在电话号码的开头,即区位号和本地号码之间可能会有空格。我们也可匹配这些情况,则通过在正则表达式中加入\s?来实现,其中?元字符表示在模式可能有0或1个空格符。

第二点是,在本地号码位的前三位和后四位数字间有可能是空格符,而不是连字号,更有胜者,或根本就没有分隔符,就是7位数字连在一起。对这几种
情况,我们可以用(-|)?来解决。这个结构的正则表达式就是转换器,它能匹配上面所说的几种情况。在()能含有管道符|时,它能匹配是否含有空格符或连
字符,而尾部的?元字符表示是否根本没有分隔符的情况。

最后,区位号也可能没有包含在圆括号内,对此可以简单地在圆括号后附上?元字符,但这不是一个很好的解决方法。因为它也包含了不配对的圆括号,
比如"(555" 或
"555)"。相反,我们可以通过另一种转换器来强迫让电话号码是否带有有圆括号:(\(\d{3}\)|\d{3})。如果我们把上面代码中的正则表达
式用这些改进后的来替换的话,上面的代码就成了一个非常有用的电话号码数字匹配器:

Pattern pattern =

Pattern.compile("(\\(\\d{3}\\)|\\d{3})\\s?\\d{3}(-|)?\\d{4}");

可以确定的是,你可以自己试着进一步改进上面的代码。

现在看看第二个例子,它是从Friedl的中改编过来的。其功能是用来检查文本文件中是否有重复的单词,这在印刷排版中会经常遇到,同样也是个语法检查器的问题。

匹配单词,像其他的一样,也可以通过好几种的正则表达式来完成。可能最直接的是\b\w+\b,其优点在于只需用少量的regex元字符。其中
\w元字符用来匹配从字母a到u的任何字符。+元字符表示匹配匹配一次或多次字符,\b元字符是用来说明匹配单词的边界,它可以是空格或任何一种不同的标
点符号(包括逗号,句号等)。

现在,我们怎样来检查一个给定的单词是否被重复了三次?为完成这个任务,需充分利用正则表达式中的所熟知的向后扫描。如前面提到的,圆括号在正
则表达式中有几种不同的用法,一个就是能提供组合类型,组合类型用来保存所匹配的结果或部分匹配的结果(以便后面能用到),即使遇到有相同的模式。在同样
的正则表达中,可能(也通常期望)不止有一个组合类型。在第n个组合类型中匹配结果可以通过向后扫描来获取到。向后扫描使得搜索重复的单词非常简
单:\b(\w+)\s+\1\b。

圆括号形成了一个组合类型,在这个正则表示中它是第一组合类型(也是仅有的一个)。向后扫描\1,指的是任何被\w+所匹配的单词。我们的正则
表达式因此能匹配这样的单词,它有一个或多个空格符,后面还跟有一个与此相同的单词。注意的是,尾部的定位类型(\b)必不可少,它可以防止发生错误。如
果我们想匹配"Paris in the the spring",而不是匹配"Java's regex package is the theme
of this article"。根据java现在的格式,则上面的正则表达式就是:Pattern pattern
=Pattern.compile("\\b(\\w+)\\s+\\1\\b");

最后进一步的修改是让我们的匹配器对大小写敏感。比如,下面的情况:"The the theme of this article is
the Java's regex
package.",这一点在regex中能非常简单地实现,即通过使用在Pattern类中预定义的静态标志CASE_INSENSITIVE :

Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b",

Pattern.CASE_INSENSITIVE);

有关正则表达式的话题是非常丰富,而且复杂的,用Java来实现也非常广泛,则需要对regex包进行的彻底研究,我们在这里所讲的只是冰山一
角。即使你对正则表达式比较陌生,使用regex包后会很快发现它强大功能和可伸缩性。如果你是个来自Perl或其他语言王国的老练的正则表达式的黑客,
使用过regex包后,你将会安心地投入到java的世界,而放弃其他的工具,并把java的regex包看成是手边必备的利器。

㈢ java中怎么用正则表达式表示数字,包括整数,小数等

java表示整数和小数的正则表达式 ^[+-]?\d+(\.\d+)?$。

㈣ java中怎么用正则表达式表示数字,包括整数,小数等

在Java编程中,表示整数和小数的正则表达式为:^[+-]?\d+(.\d+)?$。这个表达式能够匹配整数和小数,包括正数、负数以及带有小数点的数字。

正则表达式是一种用于匹配字符串中字符组合的模式。在计算机科学领域,正则表达式被广泛应用于文本检索与替换等操作。它能够帮助我们识别、提取或修改符合特定规则的文本内容。

正则表达式的概念最初是由Unix系统中的工具软件推广开来的,例如sed和grep。如今,许多编程语言都内置了强大的正则表达式引擎,用于处理字符串相关的操作。在Perl中,正则表达式被内置为一个功能强大的工具,能够满足各种复杂的文本处理需求。

正则表达式通常被简写为“regex”,其单数形式有regexp、regex,复数形式则有regexps、regexes、regexen。这些术语在不同的编程语言和工具中可能会有所不同。

在Java中,我们可以使用正则表达式来验证输入数据是否符合预期格式。例如,当用户输入一个数字时,我们可以使用上述的正则表达式来判断输入是否为有效的整数或小数。

正则表达式不仅在编程中发挥着重要作用,而且在日常的文本处理工作中也有广泛应用。通过掌握正则表达式的使用方法,我们可以更加高效地处理复杂的文本数据,提高工作效率。

㈤ java正则中REGEX = "[\u4e00-\u9fa5]+"是什么意思

“u4e00”和“u9fa5”是unicode编码,并且正好是中文编码的开始和结束的两个值,所以这个正则表达式可以用来判断字符串中是否包含中文。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

(5)javaregex扩展阅读:

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

热点内容
域名解析了不能访问 发布:2025-01-30 21:29:29 浏览:64
车辆顶配配置怎么选 发布:2025-01-30 21:29:17 浏览:161
websocket上传大文件 发布:2025-01-30 21:26:17 浏览:413
无法访问目标主机linux 发布:2025-01-30 21:25:23 浏览:328
存储介质满 发布:2025-01-30 21:18:50 浏览:885
通过ip直接访问网站 发布:2025-01-30 21:18:44 浏览:350
双线服务器的搭建 发布:2025-01-30 21:18:40 浏览:381
c语言迭代法求方程根 发布:2025-01-30 21:18:29 浏览:812
电脑无法连接录屏服务器 发布:2025-01-30 21:15:36 浏览:21
系统恢复选择密码是什么 发布:2025-01-30 21:15:23 浏览:629