Home > Article > Backend Development > Why Does Go Regex Throw a "Invalid or Unsupported Perl Syntax: (?!" Error and How to Work Around It?
Go Regex Parsing Error: (?!
When attempting to compile the following regex in Go, an error occurs:
error parsing regexp: invalid or unsupported Perl syntax: (?!
This error stems from the fact that the Go regex engine does not support lookarounds, a Perl-specific syntax. Lookarounds are regex patterns that check for the presence or absence of specific patterns around the current position, making them indispensable for certain complex text matching tasks.
Workaround
As Go does not natively support lookarounds, the workaround involves manually checking for the presence or absence of specific patterns. For the provided regex:
^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$
The following approach can be employed:
absencePattern := regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$") presencePattern := regexp.MustCompile("^(On.*On\s.+?wrote:$")
if absencePattern.MatchString(input) && !presencePattern.MatchString(input) { // The pattern is absent } else { // The pattern is present }
Additional Option
Alternatively, you could use an optional capturing group to achieve the same result:
pattern := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`) if match := pattern.FindStringSubmatch(input); match != nil { // match is nil if no match found if match[1] != "" { // Group 1 ends with "On" return false } return true }
This approach eliminates the need for separate regex patterns, simplifying the code while maintaining the desired functionality.
The above is the detailed content of Why Does Go Regex Throw a "Invalid or Unsupported Perl Syntax: (?!" Error and How to Work Around It?. For more information, please follow other related articles on the PHP Chinese website!