首页 > 解决方案 > 正则表达式不像预期的那么贪婪 /^(\d+)[^_]/

问题描述

正则表达式/^(\d+)[^_]/gm
测试字符串12_34

我希望这个正则表达式与测试字符串不匹配,因为贪婪\d+地吃数字并且在.12[^_]_

但它出乎意料地1在 Group1 中匹配。我哪里错了?

我试图找到一个与测试字符串“12”或“12xx”中的数字匹配但与“12_xx”不匹配的正则表达式

示例: https
://regex101.com/r/0QRTjs/1/ 方言:最后我将使用 Microsoft System.Text.RegularExpressions。

标签: regexgreedy

解决方案


\d+将匹配一位或多位数字。
由于您 append [^_],它后面只能跟一个非_字符。
因此\d+无法匹配12,因为它后面跟着_
1是第一个匹配组,因为它后面跟着2which is not _

如果您只想匹配带有数字的行,则有一个非常简单的表达式:

^(\d+)$

推荐阅读