Java 正则表达式
所属分类 java
浏览量 1180
java.lang.String
public boolean matches(String regex) {
return Pattern.matches(regex, this);
}
str.matches(regex)
java.util.regex.Pattern
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
. 匹配所有单个字符,除了换行符(Linux \n,Windows \r\n)
^abc 匹配字符串开头
abc$ 匹配字符串结尾
[abc] 匹配 a 或 b 或 c
[ab][cd] 匹配字母 a 或 b ,后面跟着 c 或 d
[^abc] 中括号中的第一个^ 表示否 ,匹配所有字符,除了 a 或 b 或 c
[a-z1-9] 范围匹配,匹配a到z 或 1到9
AB 匹配 A后直接跟着B
A|B 匹配 A或B
\d 匹配一个数字, [0-9]
\D 匹配一个非数字,[^0-9]
\s 匹配一个空格, [ \t\n\x0b\r\f]
\S 匹配一个非空格
\w 匹配一个字符(大小写字母、数字、下划线),[a-zA-Z_0-9]
\W 匹配一个非单词字符(除了大小写字母、数字、下划线之外的字符),[^\w]
* 零或多个,{0,} , X* 匹配零或多个X , .* 匹配任何字符串
+ 至少一个 {1,}
? 0或一个 {0,1}
{X} 只匹配 X 个 \d{3} 匹配3个数字 , .{10} 匹配任何长度为 10 的字符串
{X,Y} 匹配 X到Y个 \d{1,3} 匹配1到3 个数字
*? 如果 ? 是限定符 * 或 + 或 ? 或 {} 后面的第一个字符,那么表示非贪婪模式(尽可能少的匹配字符),而不是默认的贪婪模式
[abc|xyz] 匹配 abcxyz 中的任意一个字符
(abc|xyz) 匹配 abc 或 xyz
分组和反向引用
小括号 () 分组
模式分组后在正则表达式中创建反向引用,反向引用会保存匹配模式分组的字符串片断,可以获取并使用这些字符串片断
指定正则表达式的模式
(?i) 忽略大小写
(?s) 单行模式 single line mode . 匹配所有字符,包括换行符
(?m) 多行模式 multi-line mode ,使正则的 ^ 和 $ 匹配字符串中每行的开始和结束
反斜杠 \ 转义
匹配 . 或 { 或 [ 或 ( 或 ? 或 $ 或 ^ 或 * 这些特殊字符时,需要在前面加上 \\
比如匹配 . 时,Java 中要写为 \\. ,对于正则表达式来说就是 \.
匹配 \ 时,Java 中要写为 \\\\
四个内置 正则表达式相关的方法
s.matches("regex") 当仅且当正则匹配整个字符串时返回 true
s.split("regex") 按匹配的正则表达式切片字符串
s.replaceFirst("regex", "replacement") 替换首次匹配的字符串片段
s.replaceAll("regex", "replacement") 替换所有匹配的字符
注意 replace() 方法不支持正则表达式
public String replace(char oldChar, char newChar)
public String replace(CharSequence target, CharSequence replacement)
String str = "abc.123";
Pattern pattern = Pattern.compile("(abc|xyz)");
Matcher matcher = pattern.matcher(str);
System.out.println("groupCount="+matcher.groupCount());
while (matcher.find()) {
System.out.println(matcher.group());
System.out.println(matcher.group(1));
// java.lang.IndexOutOfBoundsException: No group 2
// System.out.println(matcher.group(2));
}
用正则表达式实现${name}形式的字符串模板
public static void main(String[] args) throws Exception {
String str = "hello,${name},age=${age},name=${name}";
Map map = new HashMap<>();
map.put("name", "tiger");
map.put("age", "9");
System.out.println(render(str,map));
}
public static String render(String content, Map map) {
Set> sets = map.entrySet();
for (Entry entry : sets) {
String regex = "\\$\\{" + entry.getKey() + "\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
content = matcher.replaceAll(entry.getValue());
}
return content;
}
上一篇
下一篇
dubbo调用失败问题排查
dubbo telnet 命令使用
时间管理大师的5大技巧
Elasticsearch实用监控指标TOP10
三国演义里的职场道理
linux文本处理shell命令