patb

package module
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Jul 15, 2023 License: MIT Imports: 4 Imported by: 1

README

go-patb

GoDev

go-patb パッケージは正規表現 LIKE な文字列パターンマッチを提供します.

Usage

import "github.com/17e10/go-patb"

// `[^@]+@(\w+\.)+\w+`
pat := patb.Block(
    patb.Ch(1, 16, patb.Not("@")),
    patb.S("@"),
    patb.Repeat(
        1, 3,
        patb.Ch(1, 16, patb.Word()),
        patb.S("."),
    ),
    patb.Ch(1, 16, patb.Word()),
)
patb.Equal(pat, "a@b") == false
patb.Equal(pat, "a@b.c") == true

License

This software is released under the MIT License, see LICENSE.

Author

17e10

Documentation

Overview

patb パッケージは正規表現 LIKE な文字列パターンマッチを提供します.

patb は正規表現のような文字列パターンマッチを関数の組み合わせで記述できます. 単純な文字列のパターンマッチを高速に処理します.

キャラクタクラスを表す CharClass 型の関数と パターンマッチの表す Pattern 型の関数の組み合わせで処理する非常に単純な構造です.

pat では必要最低限の機能を提供していますが 必要に応じて CharClass 型の関数や Pattern 型の関数を用意して利用することもできます.

FindAllFunc, FindIndex, Match, ReplaceAll, ReplaceWrite などの関数は パターンマッチを指定する pat のほかに, パターンマッチの開始場所を高速に検索するために マッチする文字列の先頭文字を表すキャラクタクラス c を指定します. すべての文字を表す pat.All を指定することで c の定義を省略できます. 検索速度は遅くなりますが手軽に利用することができます.

Index

Constants

This section is empty.

Variables

View Source
var SkipAll = notifyb.Notify("skip all")

Functions

func Equal

func Equal(pat Pattern, s string) bool

Equal は s が pat と完全に一致するかを返します.

pat に Head, Tail を含む必要はありません.

部分一致を判定する場合は Match を使用します. Equal は次の記述と機能は同じですが Equal の方が高速に動作します.

Match(Dot(), Block(Head(), pat, Tail()), s)

func FindAllFunc

func FindAllFunc(c CharClass, pat Pattern, s string, fn func(m string) error) error

FindAllFunc は s の中から pat と一致する部分を fn に渡します. fn が error を返すとそのエラーを返します.

func FindIndex

func FindIndex(c CharClass, pat Pattern, s string, i int) (f int, l int)

FindIndex は s[i:] から pat に一致する範囲を返します. パターンに一致した文字列は s[f:l] です. 一致する部分がなければ -1, -1 を返します.

func Match

func Match(c CharClass, pat Pattern, s string) bool

Match は s の中に pat と一致する部分があるかを返します.

func ReplaceAll

func ReplaceAll(c CharClass, pat Pattern, src, repl string) string

ReplaceAll は src の pat に一致する部分をすべて repl に置き換えます.

func ReplaceWrite

func ReplaceWrite(w Writer, c CharClass, pat Pattern, s string, fn func(w Writer, m string) error) error

ReplaceWrite は Writer を使って文字列を置換します.

Writer を使用した文字列置換は頻繁なメモリアロケーションが発生せず柔軟に置換できるアプローチです. 置換後の文字列は Writer から取り出します.

コールバック関数はパターンに一致した文字列を受け取り, 対応する置換文字列を Writer に書き込みます. コールバック関数が SkipAll を返すと, 以降の置換をスキップします. それ以外の error を返された場合, ReplaceWrite はその error を返します.

Types

type CharClass

type CharClass func(r rune) bool

CharClass はキャラクタクラスを表します.

r が適合するかを判定する関数です.

func All

func All() CharClass

All は全ての文字にマッチする CharClass を返します.

func Alnum

func Alnum() CharClass

Alnum は英数字 0-9, A-Z, a-z にマッチする CharClass を返します.

func Alphabet

func Alphabet() CharClass

Alphabet は英字 A-Z, a-z にマッチする CharClass を返します.

func Blank

func Blank() CharClass

Blank は半角スペース, タブにマッチする CharClass を返します.

func C

func C(set string) CharClass

C は set のいずれかの文字にマッチする CharClass を返します.

func Digit

func Digit() CharClass

Digit は 0-9 にマッチする CharClass を返します.

func Lower

func Lower() CharClass

Lower は英小文字 a-z にマッチする CharClass を返します.

func Not

func Not(set string) CharClass

Not は set 以外の文字にマッチする CharClass を返します.

func Range

func Range(lo, hi rune) CharClass

Range は lo, hi の範囲にマッチする CharClass を返します.

マッチする範囲に lo, hi を含みます.

func Space

func Space() CharClass

Space は半角スペース文字にマッチする CharClass を返します.

func Upper

func Upper() CharClass

Upper は英大文字 A-Z にマッチする CharClass を返します.

func Word

func Word() CharClass

Word は 0-9, A-Z, a-z, _ にマッチする CharClass を返します.

type Pattern

type Pattern func(s string, i int) int

Pattern はマッチする文字列パターンを表します.

s[i:]の文字列が文字列パターンにマッチする関数です. マッチするとマッチした文字列の次の文字のインデックスを返します. マッチしなかった時は -1 を返します.

func Any

func Any(pats ...Pattern) Pattern

Any は指定した Pattern のいずれかとマッチする Pattern を返します.

func Block

func Block(pats ...Pattern) Pattern

Block は順次指定した Pattern とマッチする Pattern を返します.

func Ch

func Ch(min, max uint, classes ...CharClass) Pattern

Ch はキャラクタクラスにマッチする Pattern を返します.

min, max の文字数の文字列にマッチします. キャラクタクラスは複数指定できます.

func Dot

func Dot() Pattern

Dot は任意の 1 文字にマッチする Pattern です.

func Head() Pattern

Head は先頭を表す Pattern を返します.

func Repeat

func Repeat(min, max uint, pats ...Pattern) Pattern

Repeat は min, max 回の繰り返しにマッチする Pattern を返します.

min, max の使用方法:
	0, 1 ... 正規表現の ? と同等です.
	0, n ... 正規表現の * に似た評価をします.
	1, n ... 正規表現の + に似た評価をします.

func S

func S(substr string) Pattern

S は指定文字列にマッチする Pattern を返します.

func Tail

func Tail() Pattern

Tail は末尾を表す Pattern を返します.

type Writer

type Writer interface {
	io.Writer
	io.ByteWriter
	io.StringWriter
}

Jump to

Keyboard shortcuts

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