Save Load
GitHub 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

Java Regular Expression

Java Regular Expression

一些简单的就不写了

否定式前瞻

否定式向前查找,对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”。

解决的问题:

正则表达式匹配不包含某些字符串的技巧

前瞻的语法是:

(?!匹配模式)

表达式如下

((?!hede).)*

解释一下几个部分:

  1. 在正则表达式里, ?! 是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。
  2. 表达式(?!hede).会往前查找,看看前面是不是没有“hede”字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。这种正则表达式的“查找”也叫做“zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断。
  3. 在上面的例子里,每个空字符都会检查其前面的字符串是否不是‘hede’,如果不是,这.(点号)就是匹配捕捉这个字符。表达式(?!hede).只执行一次,所以,我们将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配0次或多次:

以下是一些补充:

// 1、多个 否定式前瞻配合
((?!\})(?!")(?!,").)*
// 2、多个 否定式前瞻配合,捕获 json 指定 key 的值。
"sub_msg":\s?\"?((?!\})(?!")(?!,").)*