gpt4 book ai didi

regex - 当找到最后一次出现的单词时,这个正则表达式是如何工作的?

转载 作者:行者123 更新时间:2023-12-04 10:00:22 26 4
gpt4 key购买 nike

我遇到了如下的正则表达式:

foo(?!.*foo)

如果它被喂食 foo bar bar foo ,它将找到最后一次出现的 foo。我知道它使用一种称为负前瞻的机制,这意味着它将匹配一个不以 ?! 后的字符结尾的单词。但是这里的正则表达式是如何工作的?

最佳答案

与 sshashank 的答案略有不同(因为他的回答中的 containing 一词对我不起作用,而在正则表达式中,您必须迂腐——这完全是关于精度。)我 100% 确定 sshashank 知道这一点,并且只将其表述为为简洁起见。

正则表达式匹配 foo , 不遵循(即负前瞻 (?! ):

{{{任意数量的任何字符(即 .* )然后字符 foo }}}

如果前瞻失败,则对应于 .* 的部分不包含 foo . foo稍后来。

看到这个 automatic translation :

NODE                     EXPLANATION
--------------------------------------------------------------------------------
foo 'foo'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
foo 'foo'
--------------------------------------------------------------------------------
) end of look-ahead

来自 regex101 的不同词相同:

/foo(?!.*foo)/

foo matches the characters foo literally (case sensitive)
(?!.*foo) Negative Lookahead - Assert that it is impossible to match the regex below
.* matches any character (except newline)
Quantifier: Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
foo matches the characters foo literally (case sensitive)


RegexBuddy 有什么要说的?

foo(?!.*foo)
foo(?!.*foo)
  • 逐字匹配字符串“foo”(区分大小写)foo
  • 断言从这个位置开始匹配下面的正则表达式是不可能的(负前瞻)(?!.*foo)
  • 匹配任何不是换行符的单个字符(换行、回车、下一行、行分隔符、段落分隔符).*
  • 在零次和无限次之间,尽可能多次,按需回馈(贪婪)*
  • 逐字匹配字符串“foo”(区分大小写)foo
  • 关于regex - 当找到最后一次出现的单词时,这个正则表达式是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23751058/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com