gpt4 book ai didi

正则表达式直到但不包括

转载 作者:行者123 更新时间:2023-12-03 05:30:05 25 4
gpt4 key购买 nike

对于正则表达式,搜索直到但不包含的语法是什么?有点像:

Haystack:
The quick red fox jumped over the lazy brown dog

Expression:
.*?quick -> and then everything until it hits the letter "z" but do not include z

最佳答案

“搜索直到X但不包括X”的明确方式是:

(?:(?!X).)*

其中X可以是任何正则表达式。

不过,就您而言,这可能有点矫枉过正 - 这里最简单的方法是

[^z]*

这将匹配除 z 之外的任何内容,因此在下一个 z 之前停止。

因此 .*?quick[^z]* 将匹配 The Quick Fox Jumps over the la

但是,一旦您需要查找多个简单字母,(?:(?!X).)* 就会发挥作用,例如

(?:(?!lazy).)* - 匹配任何内容,直到单词 lazy 开头。

这是使用 lookahead assertion ,更具体地说是消极的前瞻。

.*?quick(?:(?!lazy).)* 将匹配 The Quick Fox Jumps over the

说明:

(?:        # Match the following but do not capture it:
(?!lazy) # (first assert that it's not possible to match "lazy" here
. # then match any character
)* # end of group, zero or more repetitions.

此外,在搜索关键字时,您可能需要用单词边界 anchor 将它们包围起来:\bfox\b 只会匹配完整的单词 fox 而不是 the Fox在狡猾中。

注意

如果要匹配的文本还可以包含换行符,则需要设置正则表达式引擎的“点匹配全部”选项。通常,您可以通过在正则表达式前面添加 (?s) 来实现这一点,但这并不适用于所有正则表达式引擎(尤其是 JavaScript)。

替代解决方案:

在许多情况下,您还可以使用更简单、更易读的解决方案,该解决方案使用惰性量词。通过将 ? 添加到 * 量词,它将尝试从当前位置匹配尽可能少的字符:

.*?(?=(?:X)|$)

将匹配任意数量的字符,在X(可以是任何正则表达式)之前或字符串末尾(如果X不匹配)停止。您可能还需要设置“点匹配全部”选项才能使其工作。 (注意:我在 X 周围添加了一个非捕获组,以便可靠地将其与交替隔离)

关于正则表达式直到但不包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850074/

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