正则表达式为:(?<=左侧的内容).*(?=右侧的内容)
比如:字符串aaabbbcccdddeee,想要获取"ccc"
正则表达式可以参考以下四种示例:
(?<=aaabbb).*(?=dddeee)
(?<=bbb).*(?=dddeee)
(?<=aaabbb).*(?=ddd)
(?<=bbb).*(?=ddd)
如果要包括左右两侧的内容,则可以是:左侧的内容(.*?)右侧的内容
比如上面的字符串要获取bbbcccddd,
正则表达式是:bbb(.*?)ddd
捕获两个字符之间的字符串信息,类似就是AcakeB这个字符串中提取cake。
当时只想到如下的表达式:
A.*B
上述是将以A开头和以B结尾的字符串提取出来,但是本意是不想要有A和B了。通过查资料发现了如下写法
(?<=A).*(?=B)
继续查了一点资料,又学到一点知识。
表达式 描述
(?:pattern) 非捕获匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。
(?=pattern) 非捕获匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,不进行存储供以后使用。
(?!pattern) 非捕获匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,不进行存储供以后使用
(?<=pattern) 非捕获匹配,反向肯定预查,与正向肯定预查类似,但是方向相反。
(?<!pattern) 非捕获匹配,反向否定预查,与正向否定预查类似,但是方向相反。
举例:
String str1 = "5A2118DAF110220D0E0F10111213A5A55A2118DAF1102314FFFFFFFFFFFF44A55A2118DAF1101";
// String[] strsplit = str1.split("A55A.*");
String[] strsplit = str1.split("(?=A55A)");
for (int i = 0; i < strsplit.length; i++) {
System.out.println(strsplit[i]);
}
答案:
5A2118DAF110220D0E0F10111213A5
A55A2118DAF1102314FFFFFFFFFFFF44
A55A2118DAF1101
网友评论