Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这种积极和消极的前瞻性组合有什么作用?_Java_Regex_Regex Lookarounds - Fatal编程技术网

Java 这种积极和消极的前瞻性组合有什么作用?

Java 这种积极和消极的前瞻性组合有什么作用?,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,最近我偶然发现了这个奇怪的正则表达式,它是一个积极和消极的前瞻性的组合,我不知道它到底做了什么。请记住,这是一些Java正则表达式语法 (?=((?!\bword1\b|\bword2\b).)+?\s*?) ^^ ^^ 这两个嵌套的lookahead做什么?这可以简化吗 . 如果在word1或word2中不是w,则可以简化匹配\bword1\b | \bword2\b→ \b单词[12]\b,在非单词之间。这就是否定断言的含义, +? 指至少一个这样的机构。, 但实际上只有一个,因为量词

最近我偶然发现了这个奇怪的正则表达式,它是一个积极和消极的前瞻性的组合,我不知道它到底做了什么。请记住,这是一些Java正则表达式语法

(?=((?!\bword1\b|\bword2\b).)+?\s*?)
 ^^  ^^
这两个嵌套的lookahead做什么?这可以简化吗

. 如果在word1或word2中不是w,则可以简化匹配\bword1\b | \bword2\b→ \b单词[12]\b,在非单词之间。这就是否定断言的含义, +? 指至少一个这样的机构。, 但实际上只有一个,因为量词是非贪婪的,后面跟着始终匹配的\s*。因此+?可以放弃, \s*?在这个断言中是没有意义的,因为它总是匹配的,并且不消耗任何输入,后面也不跟随任何内容, 正向前瞻断言?=。。。这里的意思是,如上文所述,该位置后面跟着除w字等以外的任何字符。 进一步简化将删除组捕获,这在上下文中可能是必需的

那么,简化的正则表达式是?=\b单词[12]\b。。它将在输入的任何字符之前成功,非单词之间的word1或word2开头除外。匹配项将为空,但第一个捕获组将包含以下字符


一个相关的问题是它应该做什么?你应该能够从上下文中判断。我想说的是:不要低估正则表达式不正确的可能性。如果是这样的话,更有效地做同样错误的事情不是解决办法。非常感谢你的帮助,亚历山大!: