regex

package module
v5.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 27, 2023 License: MIT Imports: 10 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.

Installation

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

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 (
  // default (pcre with short func names)
  "github.com/AspieSoft/go-regex/v5"

  // verbose (pcre with longer, more descriptive function names)
  "github.com/AspieSoft/go-regex/v5/verbose"

  // re2 (go's builtin re2 method to avoid the `libpcre` dependency)
  "github.com/AspieSoft/go-regex/v5/re2"

  // re2-opt (A mix of pcre with a fallback of re2)
  // it is recommended you test if your code is compatable with re2 before switching to re2-opt which may use pcre for the performance benefit if it's available
  "github.com/AspieSoft/go-regex/v5/re2-opt"
)

// 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
regex.Escape(`(.*)? \$ \\$ \\\$ regex hack failed`)

// 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 simple light replace function
regex.Compile(`re`).ReplaceString(myByteArray, myReplacementByteArray)

// 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 (or *regexp.Regexp if used)
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(str []byte) bool

IsValid will return true if a regex is valid and can compile

func JoinBytes

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

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

Types

type PCRE added in v5.0.1

type PCRE *pcre.Regexp

type RE2 added in v5.0.1

type RE2 *regexp.Regexp

type Regexp

type Regexp struct {
	RE *pcre.Regexp
}

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) 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 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) RepStrComp

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

RepStrComp is a more complex version of the RepStr 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) Split

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

Split splits a string, and keeps capture groups Similar to JavaScript .split(/re/)

type RegexpRE2

type RegexpRE2 struct {
	RE *regexp.Regexp
}

func (*RegexpRE2) RepFunc

func (reg *RegexpRE2) 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 (*RegexpRE2) RepStrComp

func (reg *RegexpRE2) RepStrComp(str []byte, rep []byte) []byte

RepStrComp is a more complex version of the RepStr 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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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