`

Java Regex - Pattern (java.util.regex.Pattern)

阅读更多

Java中的Pattern类是Java正则表达式API的主要入口类,不管在Java中你何时要使用正则表达式,那你必须是从Pattern这个类开始的。

 

在Java中,涉及正则表达式的时候也经常涉及模式匹配。因此正则表达式在Java中的类也就叫做Pattern。

因此,术语上讲,在Java中它不主张使用文本,而是模式匹配意味着就是正则表达式的匹配

 

在Java中,Pattern类被用作两个地方,你可以使用Pattern.matches()方法去快速的检查一个文本(String类型)是否匹配一个给定的正则表达式,或者你

可以用Pattern.compile()方法编译一个Pattern的实例去多次匹配正则表达式从而避免使用多个文本。

Pattern.matches()和Pattern.compile()这两个方法都会在下面进行介绍。


Pattern.matches()

最简单的检查一个正则表达式是否匹配某一个文本的方法就是使用Pattern.matches()静态方法,下面是Pattern.matches()的举例。

import java.util.regex.Pattern;

public class PatternMatchesExample {

    public static void main(String[] args) {

        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);
    }
}
 

这个Pattern.matches()的例子是在搜索一个名为text的String类型引用的变量里面是否出现单词"is",并且这个单词"is"的前后都允许有0个或者多个字

符(那两个".*"的模式)。

如果你想用Pattern.matches()这个方法仅仅代替一个文本去做一次模式的检查,那是很好的。但是你需要进行
多次匹配多次出现的时候,甚至想访问各式各样的匹配的,或者仅仅需要不是默认的配置的时候,那么你
就需要利用Pattern.compile()方法编译一个Pattern的实例。

Pattern.compile()

如果你需要不止一次利用正则表达式去匹配一个文本的时候,你需要用Pattern.compile()去创建一个Pattern的实例,下面是举例。

 

import java.util.regex.Pattern;

public class PatternCompileExample {

    public static void main(String[] args) {

        String text    =
                "This is the text to be searched " +
                "for occurrences of the http:// pattern.";

        String patternString = ".*http://.*";

        Pattern pattern = Pattern.compile(patternString);
    }
}
 

你也可以使用一些特殊的标记Pattern.compile()去编译一个Pattern的实例,下面是一个举例:

Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
Pattern类中包含一些常量标记的列表,这些列表都是int类型的,你可以使用它们在一些特定的场合。下面是使用一个标记在进行模式匹配的时候忽略大小写。如果你想获得更多的标记信息,你可以去查看Pattern的javadoc文件。

Pattern.matcher()

如果你已经获得了Pattern的实例,那么你就可以用他去获取Matcher实例,这个Matcher实例可以在文本中进行模式匹配。下面是从Pattern实例获取Matcher实例的例子:

Matcher matcher = pattern.matcher(text);

Matcher类中有一个matches()方法,它尝试着在文本中进行模式匹配。下面是关于如何使用Matcher的全部例子:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class PatternMatcherExample {

    public static void main(String[] args) {

        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);
    }
}
 
Matcher类是非常高级的,他允许你使用各式各样的模式进行部分文本的匹配。为了保持此文的简短,Matcher类将在其他文章进行介绍。

Pattern.split()

Pattern类中的split()方法可以用一个正则表达式作为分隔符把文本分割为一个String类型的数组,这是Pattern.split()方法的举例:

 

import java.util.regex.Pattern;

public class PatternSplitExample {

    public static void main(String[] args) {
    
        String text = "A sep Text sep With sep Many sep Separators";
        
        String patternString = "sep";
        Pattern pattern = Pattern.compile(patternString);
        
        String[] split = pattern.split(text);
        
        System.out.println("split.length = " + split.length);
        
        for(String element : split){
            System.out.println("element = " + element);
        }
    }
}
上述例子中Pattern.split()方法把一个文本分割成了5个单独的字符串,每个字符串中都不包含之前的方
法中把他们分割开的分隔符。

Pattern.pattern()

pattern()方法简单的返回Pattern类中已经编译过的那个正则表达式。下面是举例。

import java.util.regex.Pattern;

public class PatternPatternExample {

    public static void main(String[] args) {
    
        String patternString = "sep";
        Pattern pattern = Pattern.compile(patternString);
        
        String pattern2 = pattern.pattern();
    }
}

在这个例子中,pattern2变量将包含"sep",这个值就是在编译Pattern获得实例时产生的。

本文转自: http://tutorials.jenkov.com/java-regex/pattern.html

 

PS:头一次翻译外国人写的博客,唉,自己是基本能看懂,但是翻译成中文,那可真是太费劲了,以后还是直接原文转载吧!

分享到:
评论

相关推荐

    article-regex-primer.rar_The Few

    Reading the javadoc forjava.util.regex. Pattern is a must to see how the Java regex patterns aredi erent from other languages such as Perl. Most of the functions discussed herin are from thejava....

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet....

    java 正则表达试

    jakarta-oro.jar 及代码 import org.apache.oro.text.regex.MalformedPatternException; import org.apache.oro.text.regex.MatchResult; import org.apache.oro.text.regex...import org.apache.oro.text.regex.Util;

    pattern-dissector:探索 java.util.regex.Pattern 类的内部结构

    探索 Java 正则表达式语法的更多细节,并了解Pattern类中的引擎如何实际解释正则表达式。 不是通过文档(通过合同)推断正则表达式的含义,这允许我们直接验证引擎如何解释正则表达式。 自该项目开始(2014 年 2 ...

    JAVA正则表达式--Pattern和Matcher

    java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。 它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式。 Matcher 一个Matcher对象是一个...

    Android-RegEx-Util:此类提供日常开发中常用的正则验证函数

    Android-RegEx-Util- 此类提供日常开发中常用的正则验证函数 此类提供日常开发中常用的正则验证函数,比如:邮箱、手机号、电话号码、身份证号码、日期、数字、小数、URL、IP地址等。使用Pattern对象的matches方法...

    java统计字符串出现次数算法--StringCounter(算法源码)

    import java.util.regex.Pattern; public class StringCounter { /** * 正则统计字符串出现次数 * * @param source * @param regexNew * @return int */ public static int finder(String source, ...

    精通正则表达式~~~

    使用java.util.regex. 371 The Pattern.compile() Factory. 372 Pattern的matcher方法... 373 Matcher对象... 373 应用正则表达式... 375 查询匹配结果... 376 简单查找-替换... 378 高级查找-替换... 380 ...

    带注释的Bootstrap.java

    import java.util.regex.Pattern; import org.apache.catalina.Globals; import org.apache.catalina.security.SecurityClassLoad; import org.apache.catalina.startup.ClassLoaderFactory.Repository; import org...

    i18n Tools helper

    import java.util.regex.Pattern; /** * . <p/> @author George Wei */ public class I18nTool { private static final String TEMP_RES_ENCODING = "gbk"; private static final String TEMP_RES_FILE = "D:/...

    计算器代吗

    import java.util.regex.Pattern; import com.android.xiong.gridlayoutTest.R.id; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; ...

    Java正则表达式提取html纯文本

    import java.util.regex.Pattern; public class TestReg { static String reg = "<[a-zA-Z]+.*?>([sS]*?)</[a-zA-Z]*>"; public static void main(String[] args) { // TODO Auto-generated method ...

    pattern-expresso

    模式Expresso。 从无法在内存中缓冲的大文件中提取正则表达式模式。 安装 $ npm install -g pattern-expresso ... 编辑Util / regex-pattern.js以添加更多模式。 执照 ISC:copyright:Michael Mbah

    java解析给定url

    import java.util.regex.Pattern; /** * 现在要求用Java编写一个程序,该程序访问上面的URL,并从页面中, * 提取出上图所示位置的页面信息(仅图中所要求的内容),将其内容按如下格式,输出到控制台 * ...

    正则表达式大全案例分析案例介绍

    在Java中,正则表达式的相关类都位于java.util.regex包中。 下面是一些Java中常用的正则表达式语法和使用方法: 匹配字符串模式: 使用String类的matches()方法,可以判断一个字符串是否与某个正则表达式匹配。 ...

    Android下保存简单网页到本地(包括简单图片链接转换)实现代码

    最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了。...import java.util.regex.Pattern; import android.content.ContentValues;

    Java正则表达式使用

    一:抓取网页中的Email地址 利用正则表达式匹配网页中的文本 代码如下: [\\w[.-]]+@[\\w[.-]]+\\.[\\w]+ 将网页内容分割提取 ...import java.util.regex.Pattern; public class EmailSpider { p

    小工具

    import java.util.regex.Pattern; import java.util.*; import java.text.*; import java.io.*; import java.net.*; * * --------------------自动程序-------------------- * * 将要测试的id填写入16行的变量...

    正则表达式数字验证

    java.util.regex.Pattern pattern=java.util.regex.Pattern.compile("[0-9]+(.[0-9]+)?"); java.util.regex.Matcher match=pattern.matcher(str); if(match.matches()==false) { return false; } else { ...

    android frameworks src code

    import java.util.regex.Pattern; import java.util.regex.Matcher; /** * Listens for events from the wpa_supplicant server, and passes them on * to the {@link WifiStateTracker} for handling. Runs in ...

Global site tag (gtag.js) - Google Analytics