Regex 正则表达式^^^是什么意思?
我试图理解以下基本正则表达式模式:Regex 正则表达式^^^是什么意思?,regex,bash,Regex,Bash,我试图理解以下基本正则表达式模式: ^^^ 我是这样理解的: 第一个插入符号字符被视为标记行开头的锚点 第二个和第三个插入符号字符按字面顺序匹配(因为它们既不在字符类中导致否定,也不在第一个字符中被视为锚点) 因此,据我所知,我希望它与一行开头出现的^模式相匹配。我理解得对吗 但是,前面提到的正则表达式似乎匹配文件中的每一行,而不管其内容如何。在启用正则表达式搜索模式的情况下,在升华文本中搜索文本文件时,会观察到这种行为 我错过了什么?如何正确解释正则表达式 更新:使用bash shell
^^^
我是这样理解的:
- 第一个插入符号字符被视为标记行开头的锚点
- 第二个和第三个插入符号字符按字面顺序匹配(因为它们既不在字符类中导致否定,也不在第一个字符中被视为锚点)
^
模式相匹配。我理解得对吗
但是,前面提到的正则表达式似乎匹配文件中的每一行,而不管其内容如何。在启用正则表达式搜索模式的情况下,在升华文本中搜索文本文件时,会观察到这种行为
我错过了什么?如何正确解释正则表达式
更新:使用bash shell运行以下命令时,我观察到不同的行为:
grep“^^^”foo
其中foo与上面的文本文件相同。正则表达式将匹配包含模式^^
的所有行,直到行的开头
我现在不明白为什么结果在两种情况下不同,以及我如何完全理解行为?什么
^
匹配将取决于所使用的正则表达式引擎。在许多语言中(包括PHP、Python、Javascript和Java),^
字符类之外的任何地方都将始终匹配字符串的开头。当启用多行标志时,它还将与行的开头匹配。Notepad++的正则表达式使用的是相同的行为(除了NP++中没有多行标志;^
将始终匹配行的开头)
因此,在这里,在NP++中,^^ ^
的意思是:“匹配一行开头的位置。然后匹配一行开头的位置。然后匹配一行开头的位置。”。因此,每行的开头都会匹配
相比之下,Bash和其他一些实现BRE风格正则表达式的工具仅将^
视为锚点:
^
被解释为与行的开头匹配,接下来的两个^
由于不是模式的第一个字符,被解释为与文本^
匹配,而不是作为行锚的开头
即使给定相同的模式,不同的正则表达式风格也可能有非常不同的行为。这就是其中一种情况。它们都是单独的代币。它相当于
^
。它匹配字符串开头的位置,然后匹配字符串开头的位置,然后匹配字符串开头的位置。@CertainPerformance Right,这就是实际情况。我很难解释多次出现的插入符号。@CertainPerformance我已经用一些与您共享的推理不同的附加信息更新了问题。您能告诉我造成差异的原因吗?您说,尽管如此,前面提到的正则表达式似乎匹配文件中的每一行,而不管其内容如何。但是,您说的是完全不同的事情:正则表达式匹配包含行首的模式^^的所有行。。亲自运行,我得到的结果与您的第二次体验相同。“你是在什么情况下让每一行都匹配的?”当然,谢谢你的提问。我正在使用macOS。前者是在Sublime文本中启用正则表达式进行搜索时观察到的。后者是在使用bashshell运行grep命令时观察到的。我认为自己是一个正则表达式新手,所以我可能错过了一些关键的细节。