正则表达式中的锚点

时间:2019-06-08 23:31:55

标签: php regex

  

Dim idx as integer = 0 While Row.Column1.length > idx + 7 Output0Buffer.AddRow() Output0Buffer.outColumn1 = Row. Column1.Substring(idx,7) idx +=1 End While 指定匹配必须从行或字符串的开头开始。

字符串是什么意思?

这是否表示^将与/^(apple)/匹配,因为apple是字符串applesauce的开头。

this applesauce is delicious 总是必须处于正则表达式引擎搜索的开头吗?

为什么不匹配^

/apple ^(his)/

因为apple his 在字符串的开头?

请转义字符集中his的含义。

1 个答案:

答案 0 :(得分:1)

否,对于正则表达式而言,^\A并非总是必需的。有时,如果需要,我们会在表达式中包含它们,尤其是对于验证字符串。

在您的示例中,this applesauce is delicious是字符串,并且^(apple)在这里与我们的字符串不匹配,因为我们的字符串不是以apple开头,而是以this开头:

Demo 1

如果我们删除起始锚,我们的表达式将如下所示:

(apple)

具有捕获组(),那么它将在字符串的任何部分中找到并捕获apple

Demo 2

如果我们在表达式中添加单词边界,例如:

(\bapple\b)

那么,如果您愿意的话,我们只会发现apple作为一个单独的单词,而不是子字符串的一部分,因此我们不会捕获applesauce

Demo 3

RegEx电路

jex.im可视化正则表达式:

enter image description here

行和字符串之间的差异

String指向表达式的整个输入,可能只有一行或可能由几行组成(例如一个段落)。例如,这被认为是一个字符串,其中包含多行:

this applesauce is delicious this applesauce is delicious
apple is delicious apple is delicious

apple is delicious

apple is delicious

apple is delicious

Demo 4

好问题

在最后一个问题中,apple ^(his)不匹配:

apple 
his

因为在new lineapple之间有his,但是空格()或\s还是不够的

apple\s*^(his)

将与此相匹配,因为\s*也同时通过了spacenew lines,尽管在那里^不一定是必需的。

Demo 5