[英]Positive lookahead not working as expected
前瞻不消耗正在搜索的字符串。 这意味着[ s]
试图匹配紧接black的空格或s 。 但是,先行说明您的手必须跟随black ,因此正则表达式永远无法匹配任何内容。
要在使用前瞻时匹配黑手或黑手,请在前瞻中移动[ s]
: black(?=hand[ s])
。 另外,也不要完全使用前瞻性: blackhand[ s]
。
你正则表达式是不匹配blackhands
或blackhands
,因为它试图匹配一个空格或字母s
(字符类[ s]
文本后右) black
,也展望未来hand
后, black
。
为了匹配两个输入,您需要提前进行以下操作:
/black(?=hands?)/
或者只是不使用任何先行方式并使用:
/blackhands?/
简而言之,您应该使用
/\bblackhands?\b/
现在,您的正则表达式对于此任务有点太复杂了。 它包括
black
-从字面上匹配black
(?=hand)
-正向提前, 要求 hand
在black
之后立即出现- 但不消耗字符,引擎停留在字符串中的相同位置! [ s]
-一个字符类,它紧随black
之后匹配一个空格或s
。 因此,您永远不会获得匹配,因为空格或s
不会出现在hand
的第一个位置(它是h
)。
这是环顾四周的工作方式 :
区别在于,环顾四周实际上是匹配字符,但随后放弃了匹配,仅返回结果:match或no match 。 这就是为什么它们被称为“断言”的原因 。 它们不使用字符串中的字符,而仅声明是否可以匹配。
在您的情况下,则没有必要。 只需使用\\b
( 单词边界 )即可匹配整个单词blackhand
或blackhands
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.