繁体   English   中英

正向超前无法按预期工作

[英]Positive lookahead not working as expected

我有以下正则表达式,具有积极的前瞻性:

/black(?=hand)[ s]/

我要它匹配黑手黑手 但是,它不匹配任何内容。 我正在Regex101上进行测试。

我究竟做错了什么?

前瞻不消耗正在搜索的字符串。 这意味着[ s]试图匹配紧接black的空格或s 但是,先行说明您的必须跟随black ,因此正则表达式永远无法匹配任何内容。

要在使用前瞻时匹配黑手黑手,请在前瞻中移动[ s]black(?=hand[ s]) 另外,也不要完全使用前瞻性: blackhand[ s]

你正则表达式是不匹配blackhandsblackhands ,因为它试图匹配一个空格或字母s (字符类[ s]文本后右) black ,也展望未来hand后, black

为了匹配两个输入,您需要提前进行以下操作:

/black(?=hands?)/

或者只是不使用任何先行方式并使用:

/blackhands?/

关于环视的良好参考

简而言之,您应该使用

/\bblackhands?\b/

现在,您的正则表达式对于此任务有点太复杂了。 它包括

  • black -从字面上匹配black
  • (?=hand) -正向提前, 要求 handblack之后立即出现- 但不消耗字符,引擎停留在字符串中的相同位置!
  • [ s] -一个字符类,它紧随black之后匹配一个空格或s

因此,您永远不会获得匹配,因为空格或s不会出现在hand的第一个位置(它是h )。

这是环顾四周的工作方式

区别在于,环顾四周实际上是匹配字符,但随后放弃了匹配,仅返回结果:match或no match 这就是为什么它们被称为“断言”的原因 它们不使用字符串中的字符,而仅声明是否可以匹配。

在您的情况下,则没有必要。 只需使用\\b单词边界 )即可匹配整个单词blackhandblackhands

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM