前言
日常开发中遇到的一个需求:
String msg="这是一个字符串,括号在后面(这是括号里面的内容,你能把我取出来吗?),括号在前面,第二个括号(咋咋咋),第三个括号【这是中文中括号】"
如何取出这个字符串括号里面的内容:
public static List<String> extractMessageByRegular(String msg) {
List<String> list = new ArrayList<String>();
//正则
Pattern p = Pattern.compile("(?<=【)[^】]*|(?<=\\()[^\\)]+");
Matcher m = p.matcher(msg);
while (m.find()) {
list.add(m.group());
}
return list;
}
写了一个正则 :
(?<=【)[^】]*|(?<=\()[^\)]+
(?<=【)[^】]*|(?<=\()\S+(?=\))
非常的好用!!博主亲测。
非常的好用!!博主亲测。
简单解释一下这个正则的意思:
(?<=\()\S+(?=\)): 就是匹配以 (开头, )结尾的括号里面最少有一个非空白字符的串, 但不包括开头的(和结尾的)
(?<=\() 判断是否以括号开头,但不包含括号
\S 匹配任何非空白字符
|: 或的意思
然后这个正则是用了一个叫: 零宽度断言 的东西,你可以去看看
正则判断字符串是否以某个特定字符开头
写一个正则,判断之后的字符串是不是以 AB开头…,然后后面还有10位数字
public class RuleUtils {
private static final Pattern RULE = Pattern.compile("(^AB\\d{10}$)");
public static Boolean check(String data) {
int length = data.length();
if (length == 12) {
RULE.matcher(data).find();
}
return false;
}
}
\\d代表匹配数字,
{10}代表正好匹配次数