Regex 非贪婪匹配贪婪?
可能有一个非常简单的解释,但我现在不明白。。。 我有一个正则表达式:Regex 非贪婪匹配贪婪?,regex,Regex,可能有一个非常简单的解释,但我现在不明白。。。 我有一个正则表达式: (\s.+?\sstress) 我想让它匹配一些类似于[SPACE]的单词[SPACE]重音。然而,它与以下内容非常匹配: This will cause a lot of work stress 将匹配:将导致大量工作压力但是+?应该是非贪婪的,所以我希望它只匹配工作压力 单击以在regex101中打开它。*?是非贪婪的,但是regex引擎从左到右工作,第一个\s匹配最左边的空白,并且可以匹配任何字符,因此,尽管它是惰
(\s.+?\sstress)
我想让它匹配一些类似于[SPACE]的单词[SPACE]重音。然而,它与以下内容非常匹配:
This will cause a lot of work stress
将匹配:将导致大量工作压力
但是+?
应该是非贪婪的,所以我希望它只匹配工作压力
单击以在regex101中打开它。*?
是非贪婪的,但是regex引擎从左到右工作,第一个\s
匹配最左边的空白,并且
可以匹配任何字符,因此,尽管它是惰性量化的,但它必须到达空白,然后是重音
子字符串
要获得工作压力
,请使用
\s(\S+\sstress)
或者只是
\S+\s+stress
看
这里的要点是排除正则表达式中第一个\s
和第二个\s
之间的空格匹配\S+
匹配一个或多个非空白符号,与
相比,这是一种限制性更强的模式。这种从左到右的方法总是这样吗?换句话说,在每种编程语言中都是这样吗?请您解释一下第二个正则表达式好吗?在.NET和PyPi正则表达式中,您可以告诉正则表达式引擎使用一个特殊的正则表达式选项从右到左解析字符串。看见我使用\S
速记字符类用主要更改的简短描述更新了答案。它与[^\s]
-除空格外的任何字符匹配。@CodeNoob:这些被称为反向/反向字符类:\d
~\d
,\s
,\w
~\w
,\p{UNICODE\u CATEGRY}
~\p{UNICODE\u CATEGRY}。即使是\b
(单词边界)和\b
(单词边界以外的任何位置)也遵循相同的“行为”。感谢您的详细解释!今天学到了一些东西:)