为什么/ ^ Apple $ /的正则表达式只匹配字符串"Apple"?

use*_*116 2 regex perl

我看到一本书的描述......

书中说/^Apple/匹配的字符串在字符串的开头有一个Apple.所以它会匹配Apple Apple1 AppleApple AppleABC......

书中还说/Apple$/会匹配字符串中有一个Apple的字符串.所以它会ABCApple 12345Apple像那样......

但这本书说/^Apple$/只会匹配Apple.但我很困惑,我认为/^Apple$/应该匹配字符串"Apple"的开头和字符串"Apple"的结尾,所以AppleabcApple应该匹配,所以我很困惑.

nne*_*neo 11

^表示字符串(或行,取决于您的正则表达式引擎)的开头.$表示字符串的结尾.这些匹配就像任何字母或数字一样,但匹配"开头"和"结束"而不是特定字符.

所以,^Apple意思是"在字符串开头之后,必须有一个Apple".Apple$意思是" Apple必须在字符串结尾之后".因此,^Apple$意味着"在字符串开头之后是Apple,之后是字符串的结尾" - 因此,^Apple$只能匹配包含完全Apple没有其他内容的字符串.

如果你想匹配一个开头结尾的字符串Apple,你可以写

/^Apple.*Apple$/
Run Code Online (Sandbox Code Playgroud)

(如果你想匹配,可以重叠本身,像绳子事情变得更加复杂eraser(如匹配eraseraser) -如果你的正则表达式引擎允许的话,你可以尝试混合超前/回顾后:^(?=eraser).*(?<=eraser)$)

  • 不,"Apple.Apple"匹配"Apple",其次是一个不是换行符,然后是"Apple".`Apple.*Apple`匹配'Apple`,其次是任何不是换行符的字符,其次是`Apple`. (5认同)
  • `/ ^ Apple./`与"AppleAAAAA"不匹配,它通过匹配"AppleA"在"AppleAAAAA"中找到有效匹配. (3认同)

Ell*_*lle 7

相反的思维^$作为在开始或结束字符串匹配的话,分别想^$为不可见的字符是在字符串,您可以在正则表达式匹配的开始和结束.

搜索apple$意味着您正在查找apple紧跟字符串结尾"字符"的字符串.和类似的概念^.

因此,要匹配^apple$,字符串的开头必须紧跟 'apple' 之前,并且结尾必须紧跟 'apple'之后.


anu*_*ava 5

如果你真的想匹配一个以Apple开头或以Apple结尾的字符串,那么请使用这个正则表达式:

/^Apple|Apple$/
Run Code Online (Sandbox Code Playgroud)

  • 为什么有任何parens?`/ ^苹果|苹果$ /`.(如果你确实需要parens,它将是`...(?:^ Apple | Apple $)......`.(...)`是捕获.)修正. (3认同)