当前位置: 首页 > 知识库问答 >
问题:

Regex没有预期的那么贪婪/^(\d)[^_]/

元嘉木
2023-03-14

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

我希望这个正则表达式在测试字符串上不匹配,因为 \d 贪婪地吃掉数字 12而 [^_]_ 上失败。

但是它出乎意料地与Group1中的只有1匹配。我错在哪里?

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

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

共有2个答案

狄睿
2023-03-14

< code>\d 能够减少匹配的数量,如果这导致总的匹配。通过回溯,然后<代码> 2 满足[^_]的匹配,并且<代码> 1 被捕获。

看这里

你可以在比赛开始时使用消极的前瞻:

/^(?!\d+_)(\d+)/

看这里

或者,您可以使用不允许回溯的原子组:

/^((?>\d+))(?:[^_]|$)/

看这里

或者使用不允许回溯的所有格量词:

/^\d++([^_]|$)/

看这里

所有格量词可能是最快的…

司寇琨
2023-03-14

\d 将与一个或多个数字匹配。
由于您附加了 [^_],因此它后面只能跟一个非 _ 字符。
因此 \d 不能匹配 12,因为它后面跟着 _
1 是第一个匹配组,因为它后面跟着 2,而 2 不是 _

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

^(\d+)$
 类似资料:
  • 贪婪 vs 不贪婪 当重复一个正则表达式时,如用 a*,操作结果是尽可能多地匹配模式。当你试着匹配一对对称的定界符,如 HTML 标志中的尖括号时这个事实经常困扰你。匹配单个 HTML 标志的模式不能正常工作,因为 .* 的本质是“贪婪”的 #!python >>> s = '<html><head><title>Title</title>' >>> len(s) 32 >>> print re.

  • 本文向大家介绍贪婪算法相关面试题,主要包含被问及贪婪算法时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果往往不是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。贪婪算法并没有固定的算法解决框架,算法的关键是贪婪策

  • 你知道我错过了什么吗?

  • 我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >

  • 本文向大家介绍什么是正则的贪婪匹配?相关面试题,主要包含被问及什么是正则的贪婪匹配?时的应答技巧和注意事项,需要的朋友参考一下 匹配一个字符串没有节制,能匹配多少就去匹配多少,知道没有匹配的为止  

  • 有人有线索为什么它对案件2不起作用吗?非常感谢你的帮助。编辑:案例2的预期结果是6130美元。我好像得到了6090美元。