正则表达式-提取json属性值

在线测试及常用表达式
元字符
\d : 0-9之间的任意一个数字  \d只占一个位置
\w : 数字,字母 ,下划线 0-9 a-z A-Z _
\s : 空格或者空白等
\D : 除了\d
\W : 除了\w
\S : 除了\s
 . : 除了\n之外的任意一个字符
 \ : 转义字符
 | : 或者
() : 分组
\n : 匹配换行符
\b : 匹配边界 字符串的开头和结尾 空格的两边都是边界 => 不占用字符串位数
 ^ : 限定开始位置 => 本身不占位置
 $ : 限定结束位置 => 本身不占位置
[a-z] : 任意字母 []中的表示任意一个都可以
[^a-z] : 非字母 []中^代表除了
[abc] : abc三个字母中的任何一个 [^abc]除了这三个字母中的任何一个字符
量词元字符
* : 0到多个
+ : 1到多个
? : 0次或1次 可有可无
{n} : 正好n次;
{n,} : n到多次
{n,m} : n次到m次
JS中常用方法
str.match(reg) 如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null
//获取字符串中的数字
var reg = /\d+/g;
var str = "125ad6ad8a4da";
str.match(reg);
-->["125", "6", "8", "4"]

reg.test(str) 用来验证字符串是否符合正则 符合返回true 否则返回false
//判断小时格式
var reg = /[1-9]|1[0-9]|2[0-4]/;
var dultime = "24a";
reg.test(dultime);
-->false

reg.exec() 用来捕获符合规则的字符串
var str = 'abc123cba456aaa789';
var reg = /\d+/;
console.log(reg.exec(str))
-->[0:"123",index:3,input:"abc123cba456aaa789"];
0:"123" 表示我们捕获到的字符串
index:3 表示捕获开始位置的索引
input 表示原有的字符串
java中常用方法

需求:查找json字符串中指定属性的值
如果使用字符串转json,再遍历json获取属性值,如果层级较多比较复杂,所以使用正则表达式匹配查找,将值作为一个子串输出

	/**
	 * 正则表达式 查找匹配的字符串
	 * @param withinText 字符串
	 * @param regString 正则表达式
	 * @param index 提取正则匹配到字符串的哪一部分 0整串,1第一个()的内容,2第二个()...
	 * @return
	 */
	public static List searchMatch(String withinText, String regString,int index) {
		List resList = new ArrayList<>();
		String code = null;
		Pattern pattern = Pattern.compile(regString);
		Matcher matcher = pattern.matcher(withinText);
		if (matcher.find()) {
			matcher.reset();
			while (matcher.find()) {
				System.err.println("匹配到的整串-->" + matcher.group(0));
				code = matcher.group(index);
				System.err.println("整串中指定的子串-->" + code);
				resList.add(code);
			}
		}
		return resList;
	}
	
	@Test
    public void test(){
        String str = "{\"./BL_LOAD_NO\":\"14007\",\"./CPS_ORDER_NO\":\"TF201908270011\",\"./SYSID\":\"\",\"errorcode\":\"JM0400\",\"errordescr\":\"./SYSID Field cannot be empty !\"}{\"./BL_LOAD_NO\":\"14027\",\"./CPS_ORDER_NO\":\"TF201908280015\",\"./SYSID\":\"2601\",\"errorcode\":\"WD04002\",\"errordescr\":\"子层数据转换告警:\"}";
        List failList = StringUtils.searchMatch(str,"SYSID\":\"(\\w+)?\",",1);
        System.out.println(failList.toString());
    }
    
运行结果
[null, 2601]
匹配到的整串-->SYSID":"",
整串中指定的子串-->null
匹配到的整串-->SYSID":"2601",
整串中指定的子串-->2601

你可能感兴趣的:(理论笔记,实现案例)