Anchors match the start or end of the text. ^ matches the start, and $ matches the end. Anchors are important because regex engines typically match substrings of the text, but sometimes you want the entire text to match.

For example: Let’s say a user entered a phone number, and you want to check if it is valid. You use the following expression:

'+'? [ascii_digit '-()/ ']+

But this also finds a match in texts that aren’t valid phone numbers:

   ^^^^^^^              ^^
   match 1              match 2

To make sure the entire text has to match, we can add ^ and $ anchors:

^ '+'? [ascii_digit '-()/ ']+ $

The ^ ensures the match is at the start of the text, and the $ ensures that the end of the match is also the end of the search text.

Anchors can appear anywhere, to implement more complicated logic. For example:

('a' | ^) 'b'

This matches either ab or just b. But if there is no a, the match must be at the start of the text.