Regex 正则表达式^^^是什么意思?

Regex 正则表达式^^^是什么意思?,regex,bash,Regex,Bash,我试图理解以下基本正则表达式模式: ^^^ 我是这样理解的: 第一个插入符号字符被视为标记行开头的锚点 第二个和第三个插入符号字符按字面顺序匹配(因为它们既不在字符类中导致否定,也不在第一个字符中被视为锚点) 因此,据我所知,我希望它与一行开头出现的^模式相匹配。我理解得对吗 但是,前面提到的正则表达式似乎匹配文件中的每一行,而不管其内容如何。在启用正则表达式搜索模式的情况下,在升华文本中搜索文本文件时,会观察到这种行为 我错过了什么?如何正确解释正则表达式 更新:使用bash shell

我试图理解以下基本正则表达式模式:

^^^

我是这样理解的:

  • 第一个插入符号字符被视为标记行开头的锚点

  • 第二个和第三个插入符号字符按字面顺序匹配(因为它们既不在字符类中导致否定,也不在第一个字符中被视为锚点)

因此,据我所知,我希望它与一行开头出现的
^
模式相匹配。我理解得对吗

但是,前面提到的正则表达式似乎匹配文件中的每一行,而不管其内容如何。在启用正则表达式搜索模式的情况下,在升华文本中搜索文本文件时,会观察到这种行为

我错过了什么?如何正确解释正则表达式


更新:使用bash shell运行以下命令时,我观察到不同的行为:

grep“^^^”foo

其中foo与上面的文本文件相同。正则表达式将匹配包含模式
^^
的所有行,直到行的开头


我现在不明白为什么结果在两种情况下不同,以及我如何完全理解行为?

什么
^
匹配将取决于所使用的正则表达式引擎。在许多语言中(包括PHP、Python、Javascript和Java),
^
字符类之外的任何地方都将始终匹配字符串的开头。当启用多行标志时,它还将与行的开头匹配。Notepad++的正则表达式使用的是相同的行为(除了NP++中没有多行标志;
^
将始终匹配行的开头)

因此,在这里,在NP++中,
^^ ^
的意思是:“匹配一行开头的位置。然后匹配一行开头的位置。然后匹配一行开头的位置。”。因此,每行的开头都会匹配

相比之下,Bash和其他一些实现BRE风格正则表达式的工具仅将
^
视为锚点:

  • 当用作整个BRE的第一个字符时,扬抑符(“^”)应为锚定符。当用作子表达式的第一个字符时,实现可将扬抑符视为锚定符。扬抑符应将表达式(或可选的子表达式)锚定到字符串的开头;BRE只能匹配从字符串第一个字符开始的序列。例如,BRE“^ab”与字符串“abcdef”中的“ab”匹配,但与字符串“cdefab”中的“ab”匹配失败。BRE“(^ab)”可能与前一个字符串匹配。便携式BRE应转义子表达式中的前导扬抑符,以匹配文字扬抑符
  • 在这种情况下,第一个
    ^
    被解释为与行的开头匹配,接下来的两个
    ^
    由于不是模式的第一个字符,被解释为与文本
    ^
    匹配,而不是作为行锚的开头


    即使给定相同的模式,不同的正则表达式风格也可能有非常不同的行为。这就是其中一种情况。

    它们都是单独的代币。它相当于
    ^
    。它匹配字符串开头的位置,然后匹配字符串开头的位置,然后匹配字符串开头的位置。@CertainPerformance Right,这就是实际情况。我很难解释多次出现的插入符号。@CertainPerformance我已经用一些与您共享的推理不同的附加信息更新了问题。您能告诉我造成差异的原因吗?您说,尽管如此,前面提到的正则表达式似乎匹配文件中的每一行,而不管其内容如何。但是,您说的是完全不同的事情:正则表达式匹配包含行首的模式^^的所有行。。亲自运行,我得到的结果与您的第二次体验相同。“你是在什么情况下让每一行都匹配的?”当然,谢谢你的提问。我正在使用macOS。前者是在Sublime文本中启用正则表达式进行搜索时观察到的。后者是在使用bashshell运行grep命令时观察到的。我认为自己是一个正则表达式新手,所以我可能错过了一些关键的细节。