regex

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 11, 2024 License: MIT Imports: 9 Imported by: 7

README

Go Regex

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/tkdeng/goregex

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/tkdeng/goregex"
)

func main(){
  // pre compile a regex into the cache
  // this method also returns the compiled pcre.Regexp struct
  regex.Comp(`re`)
  
  // compile a regex and safely escape user input
  regex.Comp(`re %1`, `this will be escaped .*`); // output: this will be escaped \.\*
  regex.Comp(`re %1`, `hello \n world`); // output: hello \\n world (note: the \ was escaped, and the n is literal)
  
  // use %n to reference a param
  // use %{n} for param indexes with more than 1 digit
  regex.Comp(`re %1 and %2 ... %{12}`, `param 1`, `param 2` ..., `param 12`);

  // return an error instead of panic on failed compile
  reg, err := regex.CompTry(`re`)

  // compile RE2 instead of PCRE
  reg := regex.CompRE2(`re`)
  reg, err := regex.CompTryRE2(`re`)

  
  // 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.Comp(`(?flags)re(capture group)`).RepFunc(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.Comp(`re (capture)`).RepStr(myByteArray, []byte("test $1"))
  
  // run a simple light replace function
  regex.Comp(`re`).RepStrLit(myByteArray, []byte("all capture groups ignored (ie: $1)"))
  
  
  // return a bool if a regex matches a byte array
  regex.Comp(`re`).Match(myByteArray)
  
  // split a byte array in a similar way to JavaScript
  regex.Comp(`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.Comp("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) MatchFile added in v0.1.0

func (reg *Regexp) MatchFile(file *os.File, maxReSize ...int64) bool

MatchFile returns true if a file contains a regex match

func (*Regexp) RepFileFunc

func (reg *Regexp) RepFileFunc(file *os.File, 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

func (reg *Regexp) RepFileStr(file *os.File, 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) []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/)

type RegexpRE2

type RegexpRE2 struct {
	RE *regexp.Regexp
	// contains filtered or unexported fields
}

func CompRE2

func CompRE2(re string, params ...string) *RegexpRE2

CompRE2 compiles an re2 regular expression and store it in the cache

func CompTryRE2

func CompTryRE2(re string, params ...string) (*RegexpRE2, error)

CompTryRE2 tries to compile re2 or returns an error

func (*RegexpRE2) Match

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

Match returns true if a []byte matches a regex

func (*RegexpRE2) MatchFile added in v0.1.0

func (reg *RegexpRE2) MatchFile(file *os.File, maxReSize ...int64) bool

MatchFile returns true if a file contains a regex match

func (*RegexpRE2) RepFileFunc

func (reg *RegexpRE2) RepFileFunc(file *os.File, 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 (*RegexpRE2) RepFileStr

func (reg *RegexpRE2) RepFileStr(file *os.File, 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 (*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) RepStr

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

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

RepStrLit replaces a string with another string

@rep uses the literal string, and does Not use args like $1

func (*RegexpRE2) Split

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