正则表达式(实践篇)

2022-04-21 13:22:44 浏览数 (1)

Java

Pattern (java.util.regex.Pattern)

类 java.util.regex.Pattern 简称 Pattern, 是Java正则表达式API中的主要入口,无论何时,需要使用正则表达式,从Pattern 类开始

代码语言:javascript复制
String text    =
        "This is the text to be searched "  
        "for occurrences of the pattern.";
String pattern = ".*is.*";
boolean matches = Pattern.matches(pattern, text);
System.out.println("matches = "   matches);

上面代码在变量 text 中查找单词 “is” 是否出现,允许”is” 前后包含 0或多个字符(由 .* 指定)

Pattern.matches() 方法适用于检查 一个模式在一个文本中出现一次的情况。

如果需要匹配多次出现,甚至输出不同的匹配文本,或者只是需要非默认设置。需要通过Pattern.compile() 方法得到一个Pattern 实例。

代码语言:javascript复制
String text    =
        "This is the text to be searched "  
        "for occurrences of the http:// pattern.";
String patternString = ".*http://.*";
Pattern pattern = Pattern.compile(patternString);
可以在Compile 方法中,指定一个特殊标志:
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);

Pattern 类包含多个标志(int 类型),这些标志可以控制Pattern 匹配模式的方式。上面代码中的标志使模式匹配是忽略大小写。

一旦获得了Pattern对象,接着可以获得Matcher对象。Matcher 示例用于匹配文本中的模式.示例如下

Matcher matcher = pattern.matcher(text);

Matcher类有一个matches()方法,可以检查文本是否匹配模式。以下是关于Matcher的一个完整例子

代码语言:javascript复制
String text    =
        "This is the text to be searched "  
        "for occurrences of the http:// pattern.";
String patternString = ".*http://.*";
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
boolean matches = matcher.matches();
System.out.println("matches = "   matches);

首先创建一个Pattern,然后得到Matcher ,调用matches() 方法,返回true 表示模式匹配,返回false表示不匹配。

可以用Matcher 做更多的事。

matches() 方法不能用于查找正则表达式多次出现。如果需要,请使用find(), start() 和 end() 方法。

find() 方法用于在文本中查找出现的正则表达式,文本是创建Matcher时,通过 Pattern.matcher(text) 方法传入的。如果在文本中多次匹配,find() 方法返回第一个,之后每次调用 find() 都会返回下一个。

start() 和 end() 返回每次匹配的字串在整个文本中的开始和结束位置。实际上, end() 返回的是字符串末尾的后一位,这样,可以在把 start() 和 end() 的返回值直接用在String.substring() 里。

代码语言:javascript复制
String text    =
        "This is the text which is to be searched "  
        "for occurrences of the word 'is'.";
String patternString = "is";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
int count = 0;
while(matcher.find()) {
    count  ;
    System.out.println("found: "   count   " : "    matcher.start()   " - "   matcher.end());
}

输出结果:

found: 1 : 2 - 4

found: 2 : 5 - 7

found: 3 : 23 - 25

found: 4 : 70 - 72

Javascript

RegExp 对象

直接创建

代码语言:javascript复制
/pattern/attributes

构造方法创建

代码语言:javascript复制
new RegExp(pattern, attributes);

参数

pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

RegExp 对象有 3 个方法:test()、exec() 以及 compile()。

test() 方法检索字符串中的指定值。返回值是 true 或 false。

代码语言:javascript复制
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free")); 

由于该字符串中存在字母 "e",以上代码的输出将是:

代码语言:javascript复制
true

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

代码语言:javascript复制
var patt1=new RegExp("e");
document.write(patt1.exec("The best things in life are free")); 

由于该字符串中存在字母 "e",以上代码的输出将是:

代码语言:javascript复制
e

compile() 方法用于改变 RegExp。

compile() 既可以改变检索模式,也可以添加或删除第二个参数。

代码语言:javascript复制
var patt1=new RegExp("e");
document.write(patt1.test("The best things in life are free"));
patt1.compile("d");
document.write(patt1.test("The best things in life are free"));

由于字符串中存在 "e",而没有 "d",以上代码的输出是:

代码语言:javascript复制
truefalse

0 人点赞