文档章节

Java - 正则表达式

KuangCaibao
 KuangCaibao
发布于 2015/06/06 17:07
字数 639
阅读 15
收藏 0
点赞 0
评论 0
package test.regexp;

import java.util.regex.Pattern;

/*
 * 1. . 匹配任何单个字符
 * t.b   --->   tab,t b,...
 * 
 * 2. [] 单个字符
 * t[aeo]b  --->  tab, teb, tob
 * 
 * 3. () 分组
 * t(a|e)b  --->  tab, teb
 * 
 * 4. |  或者
 * 
 * 5. $  结尾匹配
 * 6. ^  开始匹配    如果出现在 () [] 中表示否的意思
 * 
 * ---------------  范围  ---------------
 * 7. *  0个以上
 * 8. +  1个以上
 * 9. ?  0次或者1次
 * 10. {n} n次
 * 11. {n,} 至少n次
 * 12. {n, m} 至少n次,至多m次
 * 13. -  返回    0-9 数字    a-z  小写字母
 * 
 * ---------------  转义  ---------------
 * 14. \s  空白符号      用法一般为  "\\s"
 * 15. \S  非空白符
 * 16. \d  数字
 * 17. \D  非数字
 * 18. \w  字母    等同于[a-zA-Z_0-9]
 * 19. \W  非字母
 * 
 * 反斜线字符 ('\') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。
 * 因此,表达式 \\ 与单个反斜线匹配,而 \{ 与左括号匹配。
 * 在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。
 * 可以在 非字母字符 前使用反斜线,不管该字符是否非转义构造的一部分。
 * 根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。
 * 因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。
 * 例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。
 * 字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。
 * 
 */

public class RegexpTest {

	public static void main(String[] args) {
		
//		String regStr1 = "tob";
//		System.out.println(regStr1.matches("t.b"));  // true
//		
//		String regStr2 = "toob";
//		System.out.println(regStr2.matches("t(.)(.)b"));  // true   括号分组
//		System.out.println(regStr2.matches("t[o|oo]b"));  // false  中括号只能匹配单个字符
//		System.out.println(regStr2.matches("t(o|oo)b"));  // true
		
//		String regStr3 = "hello world";
//		System.out.println(regStr3.matches("world$"));  // false
//		System.out.println(regStr3.matches("^hello"));  // false
//		System.out.println(regStr3.matches("hello world")); // true
//		System.out.println(regStr3.matches("^h(.*)d$"));  // true  以h开始d结束,中间有任意个字符
		
		String regStr4 = "/user/10404";
		String regPath = "/user/{id}";
//		System.out.println(regPath.matches(".+{\\w+}.*"));  // 语法错误
//		System.out.println(regPath.matches(".+\\{\\w+\\}.*")); // true  // \\{ 匹配{  \\w 匹配字符
//		regPath = regPath.replaceAll("\\{\\w+\\}", "(\\w+)");
//		System.out.println(regPath); // /user/(w+)
		
		regPath = regPath.replaceAll("\\{\\w+\\}", "(\\\\w+)");
		System.out.println(regPath);  // /user/(\w+)  // 形成正则表达式字符串
		System.out.println(regStr4.matches(regPath)); // true
		
		Pattern regPattern = Pattern.compile(regPath);
		Matcher matcher = regPattern.matcher(regStr4);
		System.out.println(matcher.matches());  // true
	}
}


© 著作权归作者所有

共有 人打赏支持
KuangCaibao
粉丝 1
博文 21
码字总数 10699
作品 0
武汉
程序员
java正则表达式对字符串的操作

学习java正则表达式的都知道,它的重要性;但同时也了解它的难度和复杂性。所以为了加深我们对它的了解。我举了几个例子: 例子1、 查找以Java开头,任意结尾的字符串 Pattern pattern = Patt...

goqin
2012/06/29
0
0
js和java中正则表达式的易混淆点

js中正则表达式的使用 对表单中的值进行正则表达式匹配一般有两种方法: var reg = new RegExp(regStr); reg.test(value); 如下: var reg = new RegExp(“\d{3}”); reg.test(“abc123def”...

绝影jy
2014/07/30
0
0
Java 正则表达式功能及应用

正则表达式,就是用某种模式去匹配一类字符串的一个公式,正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,不管是...

浮躁的码农
2015/07/29
0
0
java.util.regex Pattern 正则

/**String 中 replaceAll(),matches(),split() 等方法,都是调用Pattern中的方法。学习了,瞬间觉得Pattern强大了 public String replaceAll(String regex, String replacement) {return Pat......

happycode
2014/04/02
0
1
Flume 1.3.1 启动时出错解决方案

版本:Flume 1.3.1 启动时出错信息: ./bin/flume-ng: line 81: syntax error in conditional expression: unexpected token ^java.library.path=(.' ./bin/flume-ng: line 81: `if [[ $line......

Hello陈翔
2013/01/09
0
0
关于java中split的使用

之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题,但是最近一次笔试中居然有碰到了这个知识点,而且还做错了,囧!学艺不精啊。题目大概是这样的: Java代码 String s...

墨梅
2014/04/28
0
0
java8函数表达式的定义[Definition of a Lambda Expression]

英文来源于:Java in a Nutshell, 6th Edition            Definition of a Lambda Expression A lambda expression is essentially a function that does not have a name, and ......

Beaver_
2015/03/13
0
0
Java 正则表达式 StackOverflowError 问题及其优化

正则可以看做一门 DSL,但它却应用极其广泛,可以轻松解决很多场景下的字符串匹配、筛选问题。同时呢有句老话: “ 如果你有一个问题,用正则表达式解决,那么你现在就有两个问题了。” Some...

大数据之路
2015/08/02
0
0
JavaScript正则表达式(JavaScript:The Definitive Guide笔记)

//1.0 字符类 [...] 方括号内的任意字符 [^...] 不再方括号里面的任意字符 . 除换行符和其他Unicode行终止符之外的任意字符 w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9_] W 任何不适ASCII...

chungwoo.J
2012/09/09
0
0
Java中应该注意的一些特殊字符

replace ,replaceAll 两者都是由正则表达式类库实现的,但是 replace 采用的是字符串原有的意思来替换,而replaceAll 则是按照正则表达式的字符串来替换,正则表达式中有 15 个元字符,是有特...

天天顺利
2015/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一款成功的全球服游戏该如何进行架构选型与设计?

全球服游戏如今正在成为出海游戏的主要考虑模式,跨国对战、全球通服打破国界的限制,将不同地区不同语言的玩家放在一起合作/竞技,成功吸引了大量玩家的关注,并逐渐成为主流的游戏玩法。 ...

UCloudTech
6分钟前
0
0
StringUtils类中isEmpty与isBlank的区别

org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String str)。 StringUtils.isEmpty(String str) 判断某字符串是否为...

说回答
19分钟前
0
0
react native使用redux快速上手

看例图 要求点击组件一中的按钮,改版组件二的背景色。 利用state和props和容易实现。 //app.jsimport React, {Component} from 'react';import {StyleSheet, Button, View, Text} from ...

燕归南
20分钟前
0
0
页面输出JSON格式数据

package com.sysware.utils;import java.io.IOException;import javax.servlet.ServletResponse;import org.apache.log4j.Logger;import com.sysware.SyswareConstant;pub......

AK灬
42分钟前
0
0
springCloud-2.搭建Eureka Client的使用

1.使用IDEA,Spring Initializr创建 2.填写项目资料 3.选择spring boot版本,插件选择Cloud Discovery→Eureka Discovery 4.选择保存地址 5.修改application.yml eureka: client: s...

贺小康
45分钟前
0
0
CenOS 6.5 RPM 安装 elasticsearch 6.3.1

下载 wget --no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm...

阿白
47分钟前
0
0
1.4 创建虚拟机&1.5 安装CentOS7&1.6 配置ip(上)&1.7 配置ip(下)

1.4 创建虚拟机 知识点 虚拟机网络链接模式 桥连 直接将虚拟网卡桥接到一个物理网卡上面。需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主...

小丑鱼00
54分钟前
0
0
TrustAsia(亚洲诚信)助力看雪2018安全开发者峰会

2018年7月21日,看雪2018安全开发者峰会在北京国家会议中心圆满落下帷幕。拥有18年悠久历史的老牌安全技术社区——看雪学院联手国内最大开发者社区CSDN,汇聚业内顶尖的安全开发者和技术专家...

亚洲诚信
55分钟前
0
0
Spring注解介绍

@Resource、@AutoWired、@Qualifier 都用来注入对象。其中@Resource可以以 name 或 type 方式注入,@AutoWired只能以 type 方式注入,@Qualifier 只能以 name 方式注入。 但它们有一些细微区...

lqlm
今天
0
0
32位汇编在64位Ubuntu上的汇编和连接

本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld)。 以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s): .section .dataoutput...

ryanliue
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部