正则表达式

1. 不含包含分组的简单正则含包含分组的简单

举例:提取4位数字 正则:\d{4} query "12345" , 提取 "1234" 和 "2345"

2. 若包含分组,则提取第1个分组作为实体

举例:提取4位数字,但排除其他更长或更短的数字 正则:(?<!\d])(\d{4})(?!\d]) query "1212345" ,不匹配 query "abc1234def",提取 "1234"

注1:总是可以使用语法 (?:) 不捕获,或 (?=)(?!)(?<=)(?<!) 零宽断言,跳过分组使得想要匹配的分组成为第1个

3. 常见分组模式

(?:前缀1|前缀2|前缀3)(.*?)(?:后缀1|后缀2|后缀3) —— 提取前缀和后缀之间的内容,前后缀必须同时存在 ((?<=前缀)(.*)|(.*?)(?=后缀)) —— 前后缀只存在其一,提取前缀之后或后缀之前的内容

4. 常见问题

  1. 默认英文大小写不敏感,除非实体命名以 _cased 结尾
  2. 编辑完正则后,点击发布按钮才会生效,如下图
  3. 目前系统是GBK编码,每个汉字在正则里相当于2个字符,所以即使是一个汉字的可选条件也要加括号 (请)? ;字符集合也不能用 [一二三] ,只能用 (一|二|三)
  4. 受限于perl regex引擎,零宽断言 (?=)(?!)(?<=)(?<!) 中如果使用或条件 | 每个条件必须等宽, 不捕获 (?:) 则无此限制