Java 正则表达式
来源:互联网 发布:网络教育学校有区别吗 编辑:程序博客网 时间:2024/05/18 01:22
- Java 正则表达式 菜鸟教程
Java 中的 \
在普通字符串中 \
表示转义,比如\n
表示换行,\"
表示去掉双引号的特殊意义,\\
表示一个反斜杠
以上这三种情况中的最后一种在正则表达式中有不同的意义
在作为正则表达式的字符串中\\
表示正则表达式的特殊字符,比如\\d
表示数字,等同于[0-9]
。而如果需要输入一个无特殊意义的反斜杠,那就要写四个反斜杠\\\\
创建模式 Pattern 和 Matcher
Pattern 使用静态方法,而不是构造器来创建 Pattern 对象 Pattern.compile(String regex)
:regex 是一个正则表达式 Pattern.compile(String regex, int flags)
flags 常用的值 Pattern.CASE_INSENSITIVE
:忽略大小写 Pattern.MULTILINE
:^$
可以表示行首与行尾,原本它们值表示输入字符串的开头与结尾,但是我们需要匹配的字符串中可能带有换行符,所以需要用它来匹配行首与行尾
另一种简单的写法是把 flags 写在 regex 中,上边两个旗标分别等价于 "(?i)String"
,(?m)string
多个旗标连用:Pattern.CASE_INSENSITIVE | Pattern.MULTILINE
或者(?im)
Pattern 对象的 matcher 方法可以用来创建 Matcher 对象 matcher(CharSequence input)
:input 表示被匹配的字符串
Matcher 对象的方法
查找
find()
:找到与给定的正则表达式匹配的字符子串就返回 true find(int position)
:从指定位置开始查找,可以用来重置 Matcher 对象
有点类似于 cursor,每次查找后指针后移,下次查找就不是从头开始了
lookingAt()
:从字符串的头部开始匹配,只要字符串符合正则表达式就返回 true,即使这个字符串很长,后面还有好多不符合正则表达式的字符 matches()
:正则表达式与整个字符串匹配,只有当整个字符串完全符合正则表达式时才返回 true
替换
replaceFirst(String replacement)
:替换第一个匹配的字符子串
使用该方法前不用事先使用 find 方法,该方法被调用多次后仍旧只有第一个字符子串被替换 replaceAll(String replacement)
:替换所有,同样不用事先 find
索引
使用这些方法前需要先使用 find 方法
start()
:匹配到的字符串的开头的索引,整个被匹配的字符串的索引从 0 开始 start(int group)
: end()
: end(int group)
:
取子串
事先 find
group()
group(int group)
组
Java 正则表达式中组的用法应该和 Linux 中的差不多,但是我在 Linux 中很少用组,所以这里记一下
Java组的顺序是由左括号决定的,第一个左括号到与其匹配的右括号之间的为第一个组
第 0 个组就是指整个正则表达式,也就是说 matcher 对象的group()
方法等同于group(0)
如果整个正则表达式的最外面用括号括起来,那group(1)
也等同于group(0)
组里面可以使用【或】来匹配几种可能的情况(HELLO|world)
,匹配 HELLO 或者 world
在正则表达式中可以使用\\number
来引用前面的组,比如(hello)(\\1)
,这里的\\1
就是指 hello,当然也可以直接写成 hello,而在 replaceFirst 等替换方法的参数中,可以使用$number
来代表某一个组
组的使用
替换第2个匹配到的字符串
很可惜 Java 没有现成的方法来实现这个功能,只有替换第一个匹配的字符串或者全部替换。要实现这个功能可以借助组的功能
比如有一个字符串中有三个 hello,我希望把第二个 hello 替换成 XIEJIAMING
Pattern p =Pattern.compile("(hello)(.*?)(hello)");Matcher m = p.matcher("hello world, hello --- hello xxxxxx microsoft end");System.out.println(m.replaceAll("$1$2XIEJIAMING"));
输出效果如下:hello world, XIEJIAMING --- hello xxxxxx microsoft end
字符串对象支持正则表达式的方法
replaceFirst("regex","replacement")
replaceAll("regex","replacement")
String 中有一个replace(CharSequence target, CharSequence replacement)
方法,可以替换所有匹配到的子串,但是不支持正则表达式
String[] split(String regex)
:切割字符串 String[] split(String regex, int limit)
:limit指的是返回后的 String 数组的大小,1就是匹配0次,返回数组大小为1;5就是尽可能匹配四次,返回的数组最大为5;如果 limit 为非正数,则尽可能多的匹配
Pattern 对象同样支持 split 方法,不同的是它的 split 方法接受的是表输入的字符串,而不是表正则表达式的字符串
- Java 正则表达式正则
- 【正则表达式】Java正则表达式
- 正则表达式 JAVA正则表达式
- 【Java】【正则表达式】正则表达式
- Java 正则表达式详解_正则表达式
- java正则表达式!正则表达式踩坑!!!
- 正则表达式工具类,正则表达式封装,Java正则表达式
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- java和正则表达式
- java正则表达式详解!
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- Java正则表达式详解
- centos minimal 记一晚惨痛的回忆
- 表单与组件(拍拍用户注册)
- C++中的const知识整理
- 2017/8/24
- [13] Mysql常用操作
- Java 正则表达式
- gulp插件gulp-repath使用教程
- 树状数组区间操作模板
- Matlab基础_1
- 感知机与adaline算法
- nginx 泛解析
- Android 内存查看常用命令
- springmvc验证登录用过滤器还是拦截器
- HDU 2209 翻纸牌游戏