Javascript RegExp () allows you to specify a multi-line mode (m) which changes the behavior of ^ and $. ^ represents the start of the current line in multi-line mode, otherwise the start of the string $ represents the end of the current line in multi-line mode, otherwise the end of the string For example: this allows you to match something like semicolons at the end of a line where the next ...
How do I make an expression to match absolutely anything (including whitespaces)? Example: Regex: I bought _____ sheep. Matches: I bought sheep. I bought a sheep. I bought five sheep. I tried usi...
It indicates that the subpattern is a non-capture subpattern. That means whatever is matched in (?:\w+\s), even though it's enclosed by () it won't appear in the list of matches, only (\w+) will. You're still looking for a specific pattern (in this case, a single whitespace character following at least one word), but you don't care what's actually matched.
59 That regex "\\s*,\\s*" means: \s* any number of whitespace characters a comma \s* any number of whitespace characters which will split on commas and consume any spaces either side
Now, when the regex engine tries to match against aaaaaaaab, the .* will again consume the entire string. However, since the engine will have reached the end of the string and the pattern is not yet satisfied (the .* consumed everything but the pattern still has to match b afterwards), it will backtrack, one character at a time, and try to match b.
By putting ^ at the beginning of your regex and $ at the end, you ensure that no other characters are allowed before or after your regex. For example, the regex [0-9] matches the strings "9" as well as "A9B", but the regex ^[0-9]$ only matches "9".
In regex in general, ^ is negation only at the beginning of a character class. Unless CMake is doing something really funky (to the point where calling their pattern matching language "regex" could be regarded as misleading or incorrect) I'm guessing the fact that it worked for you was an isolated accident.
For reference, from regular-expressions.info/dot.html: "JavaScript and VBScript do not have an option to make the dot match line break characters. In those languages, you can use a character class such as [\s\S] to match any character. This character matches a character that is either a whitespace character (including line break characters), or a character that is not a whitespace character ...
What is also important there is that regex with non-capturing groups (?: is much faster than the same regex with capturing groups ' ('. So we should use non-capturing groups when we don't need capturing groups.