regex

package module
v8.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2023 License: MIT Imports: 9 Imported by: 0

README

Go Regex

donation link

A High Performance PCRE Regex Package That Uses A Cache.

Simplifies the the go-pcre regex package. After calling a regex, the compiled output gets cached to improve performance.

This package uses the go-pcre package for better performance.

If you need better compatability, checkout my other RE2 based module go-regex-re2.

Installation

  go get github.com/AspieSoft/go-regex/v8

Dependencies

Debian/Ubuntu (Linux)
  sudo apt install libpcre3-dev
Fedora (Linux)
  sudo dnf install pcre-devel
Arch (Linux)
  sudo yum install pcre-dev

Usage


import (
  "github.com/AspieSoft/go-regex/v8"

  // or for verbose function names
  "github.com/AspieSoft/go-regex/v8/verbose"
)

// this example will use verbose mode to make function names more clear

// pre compile a regex into the cache
// this method also returns the compiled pcre.Regexp struct
regex.Compile(`re`)

// compile a regex and safely escape user input
regex.Compile(`re %1`, `this will be escaped .*`); // output: this will be escaped \.\*
regex.Compile(`re %1`, `hello \n world`); // output: hello \\n world (note: the \ was escaped, and the n is literal)
tree/v4.0.0
// use %n to reference a param
// use %{n} for param indexes with more than 1 digit
regex.Compile(`re %1 and %2 ... %{12}`, `param 1`, `param 2` ..., `param 12`);

// manually escape a string
// note: the compile methods params are automatically escaped
regex.Escape(`(.*)? \$ \\$ \\\$ regex hack failed`)

// determine if a regex is valid, and can be compiled by this module
regex.IsValid(`re`)

// determine if a regex is valid, and can be compiled by the PCRE module
regex.IsValidPCRE(`re`)

// determine if a regex is valid, and can be compiled by the builtin RE2 module
regex.IsValidRE2(`re`)

// run a replace function (most advanced feature)
regex.Compile(`(?flags)re(capture group)`).ReplaceFunc(myByteArray, func(data func(int) []byte) []byte {
  data(0) // get the string
  data(1) // get the first capture group

  return []byte("")

  // if the last option is true, returning nil will stop the loop early
  return nil
}, true /* optional: if true, will not process a return output */)

// run a replace function
regex.Compile(`re (capture)`).ReplaceString(myByteArray, []byte("test $1"))

// run a simple light replace function
regex.Compile(`re`).ReplaceStringLiteral(myByteArray, []byte("all capture groups ignored (ie: $1)"))


// return a bool if a regex matches a byte array
regex.Compile(`re`).Match(myByteArray)

// split a byte array in a similar way to JavaScript
regex.Compile(`re|(keep this and split like in JavaScript)`).Split(myByteArray)

// a regex string is modified before compiling, to add a few other features
`use \' in place of ` + "`" + ` to make things easier`
`(?#This is a comment in regex)`

// an alias of pcre.Regexp
regex.PCRE

// an alias of *regexp.Regexp
regex.RE2

// direct access to compiled pcre.Regexp
regex.Compile("re").RE


// another helpful function
// this method makes it easier to return results to a regex function
regex.JoinBytes("string", []byte("byte array"), 10, 'c', data(2))

// the above method can be used in place of this one
append(append(append(append([]byte("string"), []byte("byte array")...), []byte(strconv.Itoa(10))...), 'c'), data(2)...)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Escape

func Escape(re string) string

Escape will escape regex special chars

func IsValid

func IsValid(re string) bool

IsValid will return true if a regex is valid and can be compiled by this module

func IsValidPCRE

func IsValidPCRE(re string) bool

IsValidPCRE will return true if a regex is valid and can be compiled by the PCRE module

func IsValidRE2

func IsValidRE2(re string) bool

IsValidRE2 will return true if a regex is valid and can be compiled by the builtin RE2 module

func JoinBytes

func JoinBytes(bytes ...interface{}) []byte

JoinBytes is an easy way to join multiple values into a single []byte

Types

type PCRE

type PCRE pcre.Regexp

type RE2

type RE2 *regexp.Regexp

type Regexp

type Regexp struct {
	RE pcre.Regexp
	// contains filtered or unexported fields
}

func Comp

func Comp(re string, params ...string) *Regexp

Comp compiles a regular expression and store it in the cache

func CompTry

func CompTry(re string, params ...string) (*Regexp, error)

CompTry tries to compile or returns an error

func (*Regexp) Match

func (reg *Regexp) Match(str []byte) bool

Match returns true if a []byte matches a regex

func (*Regexp) RepFileFunc added in v8.1.2

func (reg *Regexp) RepFileFunc(name string, rep func(data func(int) []byte) []byte, all bool, maxReSize ...int64) error

RepFileFunc replaces a regex match with the result of a callback function in a file

@all: if true, will replace all text matching @re, if false, will only replace the first occurrence

func (*Regexp) RepFileStr added in v8.1.2

func (reg *Regexp) RepFileStr(name string, rep []byte, all bool, maxReSize ...int64) error

RepFileStr replaces a regex match with a new []byte in a file

@all: if true, will replace all text matching @re, if false, will only replace the first occurrence

func (*Regexp) RepFunc

func (reg *Regexp) RepFunc(str []byte, rep func(data func(int) []byte) []byte, blank ...bool) []byte

RepFunc replaces a string with the result of a function

similar to JavaScript .replace(/re/, function(data){})

func (*Regexp) RepStr

func (reg *Regexp) RepStr(str []byte, rep []byte) []byte

RepStr is a more complex version of the RepStrLit method

this function will replace things in the result like $1 with your capture groups

use $0 to use the full regex capture group

use ${123} to use numbers with more than one digit

func (*Regexp) RepStrLit

func (reg *Regexp) RepStrLit(str []byte, rep []byte) []byte

RepStrLit replaces a string with another string

note: this function is optimized for performance, and the replacement string does not accept replacements like $1

func (*Regexp) Split

func (reg *Regexp) Split(str []byte) [][]byte

Split splits a string, and keeps capture groups

Similar to JavaScript .split(/re/)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL