视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
java中正则表达式的使用方法
2020-11-27 19:57:58 责编:小采
文档


这次给大家带来java中正则表达式的使用方法,java中正则表达式使用的注意事项有哪些,下面就是实战案例,一起来看一下。

判断目标字符串中是否 可能 含这个字符。

假如待匹配字符串包含指定字符串并且匹配正则表达式,则为真,假如待匹配字符串不包含指定字符串但是匹配正则表达式,也为真,假如其他情况为假。

看一段简单的代码示例:

private static String s = "1";
public static void main(String[] args) {
 testOne(s);
} 
private static void testOne(String s){
 System.out.println(s.matches("1?"));
}

这段程序测试的是s中是否包含"1",假如包含则返回true,不包含则返回false。此处运行程序结果得到: true 。

注意此处?的用法不同于contains的用法,contains用于测试字符串中是否包含某个字符串,match后的参数则是整个字符串的正则形式。

可以再做一个简单的测试:

private static String s = "1java";
public static void main(String[] args) {
 testOne(s);
}
private static void testOne(String s){
 System.out.println(s.matches("1?"));
}

此处将待匹配的字符串改成了"1java",运行此程序显示的结果为 false 。此时我们再次稍微修改一下即可:

private static String s = "1java";
public static void main(String[] args) {
 testOne(s);
}
private static void testOne(String s){
 System.out.println(s.matches("1?[a-z]+"));
}

上面的代码修改了了一下match中的参数,此时结果即为 true 。

再来看一个情况

private static String s = "12";
public static void main(String[] args) {
 testOne(s);
}
private static void testOne(String s){
 System.out.println(s.matches("0?\\d+"));
}

此时返回的结果仍为 true ,待匹配字符串中不包含"0",但是后边的表达式"\d+"完全匹配"12"。所以返回true。

2. "\"的作用

转义符

在java中的String使用中,我们知道"\"表示转义符。当我们需要表示

String s="He is a "Monster"";

其中的 " " 不能直接写入字符串中,否则编译器会直接报错。需要经过转义符来转换:

String s="He is a \"Monster\"";

但是在java中的正则表达式中,有时候需要用到"\"来表示一些特定的符号,比如 \d 在正则表达式中表示匹配一位数字,但用到正则表达式中则必须使用 \\ 这样的双反斜杠来表示一个 \ 。也就是说我们在代码中必须写成 \\d 来匹配一个数组,相当于正则表达式中的 \d 。

假如你想在正则表达式中插入一个正常的 \ ,则需要写入 \\\\ 。

private static String s = "\\12";
public static void main(String[] args) {
 testOne(s);
}
private static void testOne(String s){
 System.out.println(s);
 System.out.println(s.contains("\\"));
 System.out.println(s.matches("\\\\?\\d+"));
}

注意看一下这段程序中的表示: s=\12 ,这是我们的待匹配字符串,它包含了一个 \ 和两个数字 12 。 String.contains()方法能匹配字符串,可以使用正常的 \\ 表示方法,但是在String.match()方法中是正则表达式,此时必须使用 \\\\ 来表示一个正常的 \ 方可匹配成功。

3. "+"的作用

一个或多个之前的表达式

前边已经稍微解释过这个字符的作用, \\d 表示匹配一个数字,在后边加上一个"+"则表示匹配一个或多个数字

private static String s = "12345";
public static void main(String[] args) {
 testOne(s);
}
private static void testOne(String s){
 System.out.println(s.matches("\\\\?\\d+"));
}

无论s中包含多少个数字,只要全部是数字即可匹配。假如要匹配 123 则需要用如下表达式:

(123)+

有一种错误写法如下:

123+

这种表示首先匹配12,然后匹配多个3。 代码测试:

private static String s = "1233";
public static void main(String[] args) {
 testOne(s);
}
private static void testOne(String s){
 System.out.println(s.matches("123+"));
}

输出为真,此时就是匹配的12+多个3。

量词

量词表示一个正则表达式在匹配的过程中的模式

  • 贪婪型 一般的匹配模式总是贪婪型的,除非被设置了其他选项。贪婪表达式会为所有可能的匹配来尽可能的匹配,也就是匹配最多的字符串。

  • 勉强型 用问号来制定,勉强表达式会尽可能少的匹配,也就是匹配最少的字符串。

  • 占有型 这种类型是java中特有的

  • 贪婪型勉强型占有型说明
    X?X??X?+一个或0个X
    X*X*?X*+0个或多个X
    X+X+?X++一个或多个X
    X{n}X{n}?X{n}+恰好n次X
    X{n,}X{n,}?X{n,}+至少n次X
    X{n,m}X{n,m}?X{n,m}+至少n次,至多m次X

    正则表达式中的字符

    字符

    下表展示了一些常用的字符表示

    示例说明
    B指定字符B
    \xhh16进制表示字符,0xhh
    \uhhhh16进制表示unicode字符0xhhhh
    \t制表符TAB
    \n换行符
    \r回车
    \f换页
    \e转义(escape)

    字符类

    下表列出了正则表达式中常用的字符类

    示例说明
    .匹配任意单个字符
    [abc]包含abc中任意的字符,等价于a
    [^abc]除了abc外的任意字符
    [a-zA-Z]从a到z或者从A到Z中的任意字符
    [abd[1-9]]abd中任意字符或者1-9中任意字符,取并集
    [a-z&&[hij]]任意h、i、j字符,取交集
    \s空白符(空格、tab、换行、换页和回车)
    \S非空白符(^\s)
    \d数字(0-9)
    \D非数字(^0-9)
    \w词字符[a-zA-Z0-9]
    \W非词字符[^\w]

    逻辑操作符

    示例说明
    XYY跟在X后边
    XY
    (X)捕获组

    边界匹配符

    说明
    ^一行的起始
    $一行的结束
    \b词的边界
    \B非词的边界
    \G前一个匹配的结束

    一个简单的例子来创建上面表中的正则表达式

    private static String s = "java123\nJAVA";//形式为"[a-z]{4}[0-9]{3}\s[A-Z]{4}
    public static void main(String[] args) {
     testOne(s);
    }
    private static void testOne(String s) {
     System.out.println(s);
     System.out.println(s.matches(".+\\s.\\S+"));//测试"."匹配任意字符与空白字符"\s与非空白字符\S"
     System.out.println(s.matches("[a-z]+[1-9]+\\s[A-Z]+"));//测试[a-zA-Z0-9]的任意匹配
     System.out.println(s.matches("[^0-9]+[^a-z]+[^\\S][^a-z]+"));//测试^(非)
     System.out.println(s.matches("[bv[ja]]+[123]+\\s[A-Z&&1JAV]+"));//测试与和或
     System.out.println(s.matches("\\w{4}\\d{3}\\s\\w{4}"));//测试\w词字符与\d数字
     System.out.println(s.matches("\\D{4}\\w{3}\\W\\D{4}"));//测试非词字符\W与非数字\D
    }

    注释中已经写的相当清楚了,输出结果为:

    java123
    JAVA
    true
    true
    true
    true
    true
    true

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    正则的元字符和普通字符

    用正则表达式替换url参数

    下载本文
    显示全文
    专题