我正在通过 Jim Hollenhorst 的30 分钟正则表达式教程
学习正则表达式
,我检查了这两个正则表达式在他的软件(Expresso)中提到的标题,我发现它(?=)
与文本字符串中的每个位置都匹配一个空字符,并且(?!)
总是失败
,我发现我自己很难理解空字符和空匹配。我觉得我已经抓住了它,但同时它似乎是无形的。
所以我希望有人能为我解释“空”匹配(它是如何工作的,以及一些类似的用法或正则表达式)。
谢谢。
我正在通过 Jim Hollenhorst 的30 分钟正则表达式教程
学习正则表达式
,我检查了这两个正则表达式在他的软件(Expresso)中提到的标题,我发现它(?=)
与文本字符串中的每个位置都匹配一个空字符,并且(?!)
总是失败
,我发现我自己很难理解空字符和空匹配。我觉得我已经抓住了它,但同时它似乎是无形的。
所以我希望有人能为我解释“空”匹配(它是如何工作的,以及一些类似的用法或正则表达式)。
谢谢。
(?=foo)
匹配后面跟的任何位置foo
,并且(?!foo)
匹配后面不跟的任何位置foo
。因此,由于每个位置后面都有空字符串——任何两个字符之间都有一个空子字符串,并且任何字符串的开头和结尾都有一个空子字符串——完全(?=)
匹配任何位置,并且(?!)
根本不匹配任何位置.
(?=)
和(?!)
分别是正面展望(?=regex)
和负面展望的退化案例(?!regex)
。
(?=)
表示输入的下一部分匹配零宽度字符串(相邻字符或最后一个字符与输入结尾之间的点),这始终是正确的。
(?!)
表示输入的下一部分不能匹配零宽度字符串,这总是错误的 - 每个字符后面总是没有任何内容。