package syntax
Import Path
github.com/dlclark/regexp2/v2/syntax (on go.dev)
Dependency Relation
imports 13 packages, and imported by 2 packages
Involved Source Files
charclass.go
code.go
escape.go
grapheme.go
optimizations.go
parser.go
prefix.go
prefixanalyzer.go
replacerdata.go
tree.go
unicode_alias_tables.go
writer.go
Package-Level Type Names (total 27)
anchorDescription returns a human-readable description of the anchors
AnchorLoc : expvar.Var
AnchorLoc : fmt.Stringer
const AnchorBeginning
const AnchorBol
const AnchorBoundary
const AnchorECMABoundary
const AnchorEnd
const AnchorEndZ
const AnchorEol
const AnchorStart
BmPrefix precomputes the Boyer-Moore
tables for fast string scanning. These tables allow
you to scan for the first occurrence of a string within
a large body of text without examining every character.
The performance of the heuristic depends on the actual
string and the text being searched, but usually, the longer
the string that is being searched for, the fewer characters
need to be examined.
Dump returns the contents of the filter as a human readable string
When a regex is anchored, we can do a quick IsMatch test instead of a Scan
Scan uses the Boyer-Moore algorithm to find the first occurrence
of the specified string within text, beginning at index, and
constrained within beglimit and endlimit.
The direction and case-sensitivity of the match is determined
by the arguments to the RegexBoyerMoore constructor.
(*BmPrefix) String() string
*BmPrefix : expvar.Var
*BmPrefix : fmt.Stringer
Cat string
Negate bool
( Category) String() string
Category : expvar.Var
Category : fmt.Stringer
func (*CharSet).GetIfOnlyUnicodeCategories() (cats []Category, negate bool)
true if we know for sure that all ASCII values are in the set; otherwise, false.
This can only be true if OnlyRanges is true.
true if we know for sure that all non-ASCII values are in the set; otherwise, false.
This can only be true if OnlyRanges is true.
true if we know for sure that the set doesn't contain any ASCII values; otherwise, false.
This can only be true if OnlyRanges is true.
true if we know for sure that the set contains only ASCII values; otherwise, false.
This can only be true if OnlyRanges is true.
The inclusive lower bound.
This is only valid if OnlyRanges is true.
true if the set contains only ranges; false if it contains Unicode categories and/or subtraction.
The exclusive upper bound.
This is only valid if OnlyRanges is true.
func (*CharSet).Analyze() CharClassAnalysisResults
CharSet combines start-end rune ranges and unicode categories representing a set of characters
<summary>Analyzes the set to determine some basic properties that can be used to optimize usage.
CharIn returns true if the rune is in our character set (either ranges or categories).
It handles negations and subtracted sub-charsets.
Copy makes a deep copy to prevent accidental mutation of a set
(*CharSet) Equals(c2 *CharSet) bool
( CharSet) GetIfNRanges(n int) []SingleRange
(*CharSet) GetIfOnlyUnicodeCategories() (cats []Category, negate bool)
Gets all of the characters in the specified set, storing them into the provided span.
Only considers character classes that only contain sets (no categories),
just simple sets containing starting/ending pairs (subtraction from those pairs
is factored in, however).The returned characters may be negated: if IsNegated(set)
is false, then the returned characters are the only ones that match; if it returns
true, then the returned characters are the only ones that don't match.
( CharSet) HasSubtraction() bool
(*CharSet) Hash() []byte
( CharSet) IsAnything() bool
( CharSet) IsEmpty() bool
( CharSet) IsMergeable() bool
( CharSet) IsNegated() bool
( CharSet) IsSingleton() bool
( CharSet) IsSingletonInverse() bool
Gets whether the specified set is a named set with a reasonably small count
of Unicode characters. Designed to help the regexp code generator choose a better
search algo for finding chars
Description is a short name that can be used as part of a var name in code gen
Determines whether two sets could overlap.
SingletonChar will return the char from the first range without validation.
It assumes you have checked for IsSingleton or IsSingletonInverse and will panic given bad input
gets a human-readable description for a set string
CharSet : expvar.Var
CharSet : fmt.Stringer
func NewCharSetRuntime(buf string) CharSet
func CharSet.Copy() CharSet
func (*CharSet).Equals(c2 *CharSet) bool
func (*CharSet).MayOverlap(set2 *CharSet) bool
func github.com/dlclark/regexp2/v2/helpers.IndexOfAnyExceptInSet(in []rune, set CharSet) int
// the set of zero-length start anchors (RegexFCD.Bol, etc)
// the fixed prefix string as a Boyer-Moore machine (may be null)
// mapping of user group numbers -> impl group slots
// number of impl group slots
// capture slots observable by the pattern itself during quick matches
// the code
// shared match tables for deterministic alternations
// the set of candidate first characters (may be null)
// analyzed candidate search strategy
// bool-only code with unobservable captures removed
// lightweight tables targeting QuickCodes
// true if right to left
// character set table
// string table
// how many instructions use backtracking
(*Code) Dump() string
OpcodeDescription is a humman readable string of the specific offset
PrepareCharSetASCIIBitmaps builds bounded ASCII lookup tables for compiled
character classes before the regexp is shared across goroutines.
func Write(tree *RegexTree) (*Code, error)
DispatchTable maps disjoint character sets to branch indices. Larger tables
use a direct ASCII lookup, small tables use compact masks, and non-ASCII
runes inspect the full sets.
// entry index + 1; zero means no branch
// two membership words per branch when ASCII is nil
Branches []int
Sets []int
An Error describes a failure to parse a regular expression
and gives the offending expression.
Args []interface{}
Code ErrorCode
Expr string
(*Error) Error() string
*Error : error
An ErrorCode describes a failure to parse a regular expression.
( ErrorCode) String() string
ErrorCode : expvar.Var
ErrorCode : fmt.Stringer
const ErrInternalError
( FindNextStartingPositionMode) String() string
FindNextStartingPositionMode : expvar.Var
FindNextStartingPositionMode : fmt.Stringer
const FixedDistanceChar_LeftToRight
const FixedDistanceSets_LeftToRight
const FixedDistanceString_LeftToRight
const LeadingAnchor_LeftToRight_Beginning
const LeadingAnchor_LeftToRight_End
const LeadingAnchor_LeftToRight_EndZ
const LeadingAnchor_LeftToRight_Start
const LeadingAnchor_RightToLeft_Beginning
const LeadingAnchor_RightToLeft_End
const LeadingAnchor_RightToLeft_EndZ
const LeadingAnchor_RightToLeft_Start
const LeadingChar_RightToLeft
const LeadingSet_LeftToRight
const LeadingSet_RightToLeft
const LeadingString_LeftToRight
const LeadingString_OrdinalIgnoreCase_LeftToRight
const LeadingString_RightToLeft
const LeadingStrings_LeftToRight
const LeadingStrings_OrdinalIgnoreCase_LeftToRight
const LiteralAfterLoop_LeftToRight
const NoSearch
const RequiredLandmarkChain_LeftToRight
const TrailingAnchor_FixedLength_LeftToRight_End
const TrailingAnchor_FixedLength_LeftToRight_EndZ
FindMode FindNextStartingPositionMode
FixedDistanceLiteral FixedDistanceLiteral
FixedDistanceSets []FixedDistanceSet
LandmarkChain *RequiredLandmarkChain
LeadingAnchor NodeType
LeadingPrefix string
LeadingPrefixFirstRunes []rune
LeadingPrefixes []string
LeadingPrefixesRunes [][]rune
LiteralAfterLoop *LiteralAfterLoop
MaxPossibleLength int
MinRequiredLength int
TrailingAnchor NodeType
(*FindOptimizations) Dump() string
const Back
const Back2
const Backjump
const Beginning
const Bol
const Boundary
const Branchcount
const Branchmark
const Capturemark
const Ci
const Dispatch
const ECMABoundary
const End
const EndZ
const Eol
const Forejump
const Getmark
const Goto
const Grapheme
const Lazybranch
const Lazybranchcount
const Lazybranchmark
const Mask
const Multi
const Nonboundary
const NonECMABoundary
const Nothing
const Notone
const Notonelazy
const Notoneloop
const Notoneloopatomic
const Notonerep
const Nullcount
const Nullmark
const One
const Onelazy
const Oneloop
const Oneloopatomic
const Onerep
const Prune
const Ref
const Rtl
const Set
const Setcount
const Setjump
const Setlazy
const Setloop
const Setloopatomic
const Setmark
const Setrep
const Start
const Stop
const Testref
const UpdateBumpalong
const AfterChild
const BeforeChild
const NtAlternate
const NtAtomic
const NtBackRefCond
const NtBeginning
const NtBol
const NtBoundary
const NtCapture
const NtConcatenate
const NtECMABoundary
const NtEmpty
const NtEnd
const NtEndZ
const NtEol
const NtExprCond
const NtGrapheme
const NtGroup
const NtLazyloop
const NtLoop
const NtMulti
const NtNegLook
const NtNonboundary
const NtNonECMABoundary
const NtNothing
const NtNotone
const NtNotonelazy
const NtNotoneloop
const NtNotoneloopatomic
const NtOne
const NtOnelazy
const NtOneloop
const NtOneloopatomic
const NtPosLook
const NtRef
const NtSet
const NtSetlazy
const NtSetloop
const NtSetloopatomic
const NtStart
const NtUnknown
const NtUpdateBumpalong
CodeGen bool
MaintainCaptureOrder bool
RegexOptions RegexOptions
func Parse(re string, op ParseOptions) (*RegexTree, error)
Implementation notes:
Since the node tree is a temporary data structure only used
during compilation of the regexp to integer codes, it's
designed for clarity and convenience rather than
space efficiency.
RegexNodes are built into a tree, linked by the n.children list.
Each node also has a n.parent and n.ichild member indicating
its parent and which child # it is in its parent's list.
RegexNodes come in as many types as there are constructs in
a regular expression, for example, "concatenate", "alternate",
"one", "rept", "group". There are also node types for basic
peephole optimizations, e.g., "onerep", "notsetrep", etc.
Because perl 5 allows "lookback" groups that scan backwards,
each node also gets a "direction". Normally the value of
boolean n.backward = false.
On the parse stack, each tree has a "role" - basically, the
nonterminal in the grammar that the parser has currently
assigned to the tree. That code is stored in n.role.
Finally, some of the different kinds of nodes have data.
Two integers (for the looping constructs) are stored in
n.operands, an an object (either a string or a set)
is stored in n.data
Ch rune
Children []*RegexNode
M int
N int
Options RegexOptions
Parent *RegexNode
Set *CharSet
Str []rune
T NodeType
Computes a min bound on the required length of any string that could possibly match.
If the result is 0, there is no minimum we can enforce.
(*RegexNode) Description() string
Recurs into the last expression of a loop node, looking to see if it can find a node
that could be made atomic _assuming_ the conditions exist for it with the loop's ancestors.
Returns The found node that should be explored further for auto-atomicity; null if it doesn't exist.
(*RegexNode) FindStartingLiteral() *StartingLiteral
Finds the guaranteed beginning literal(s) of the node, or null if none exists.
allowZeroWidth = true
Gets the character that begins a One or Multi.
(*RegexNode) IsAtomicloopFamily() bool
(*RegexNode) IsNotoneFamily() bool
(*RegexNode) IsNotoneloopFamily() bool
(*RegexNode) IsOneFamily() bool
(*RegexNode) IsOneloopFamily() bool
(*RegexNode) IsSetFamily() bool
(*RegexNode) IsSetloopFamily() bool
(*RegexNode) ReplaceChild(index int, newChild *RegexNode)
Determine whether the specified child node is the beginning of a sequence that can
trivially have length checks combined in order to avoid bounds checks.
requiredLength is The sum of all the fixed lengths for the nodes in the sequence.</param>
exclusiveEnd is The index of the node just after the last one in the sequence.</param>
returns true if more than one node can have their length checks combined; otherwise, false.</returns>
There are additional node types for which we can prove a fixed length, e.g. examining all branches
of an alternation and returning true if all their lengths are equal. However, the primary purpose
of this method is to avoid bounds checks by consolidating length checks that guard accesses to
strings/spans for which the JIT can see a fixed index within bounds, and alternations employ
patterns that defeat that (e.g. reassigning the span in question). As such, the implementation
remains focused on only a core subset of nodes that are a) likely to be used in concatenations and
b) employ simple patterns of checks.
Determines whether the specified child index of a concatenation begins a sequence whose values
should be used to perform an ordinal case-insensitive comparison.
When consumeZeroWidthNodes is false, the consumer needs the semantics of matching the produced string to fully represent
the semantics of all the consumed nodes, which means nodes can be consumed iff they produce text that's represented
by the resulting string. When true, the resulting string needs to fully represent all valid matches at that position,
but it can have false positives, which means the resulting string doesn't need to fully represent all zero-width nodes
consumed. true is only valid when used as part of a search to determine where to try a full match, not as part of
actual matching logic.
consumeZeroWidthNodes = false
*RegexNode : github.com/alexflint/go-arg.Described
func (*RegexNode).FindLastExpressionInLoopForAutoAtomic() *RegexNode
func (*RegexNode).FindStartingLiteralNode(allowZeroWidth bool) *RegexNode
func (*RegexNode).ReplaceChild(index int, newChild *RegexNode)
func NewReplacerData(rep string, caps map[int]int, capsize int, capnames map[string]int, op RegexOptions) (*ReplacerData, error)
const ECMAScript
const ExplicitCapture
const IgnoreCase
const IgnorePatternWhitespace
const Multiline
const RE2
const RightToLeft
const Singleline
const Unicode
Caplist []string
Capnames map[string]int
Capnumlist []int
Caps map[int]int
Captop int
FindOptimizations *FindOptimizations
Options RegexOptions
Root *RegexNode
(*RegexTree) Dump() string
func Parse(re string, op ParseOptions) (*RegexTree, error)
func Write(tree *RegexTree) (*Code, error)
Rep string
Rules []int
Strings []string
func NewReplacerData(rep string, caps map[int]int, capsize int, capnames map[string]int, op RegexOptions) (*ReplacerData, error)
Alternatives describes the mutually exclusive shapes that can satisfy
this single required landmark. A landmark matches when any one alternative
matches at a position in the input.
LeadingWhitespaceSet is the optional or required whitespace immediately
before the core token. If RequireWhitespaceBefore is true, at least one
rune from this set must precede the core. When this alternative is the
first matched landmark, the runner may rewind over additional contiguous
leading whitespace from this set before rewinding over LeadingLoopSet.
Literal is the core token for literal alternatives. When non-empty, it
must match exactly at the candidate core position, and Set must be nil.
MaxRepeat int
MinRepeat and MaxRepeat describe the core token width. Literal alternatives
use 1..1 regardless of literal length because the literal is matched as one
fixed core token; Set alternatives use the source set repetition.
RequireWhitespaceAfter bool
RequireWhitespaceBefore bool
Set is the core token for character-class alternatives. When non-nil, it
must match between MinRepeat and MaxRepeat runes at the candidate core
position, and Literal must be empty. The analyzer only builds set
alternatives for non-negated sets that can be cheaply enumerated, but the
runner uses Set for membership checks.
TrailingWhitespaceSet is the optional or required whitespace immediately
after the core token. If RequireWhitespaceAfter is true, at least one rune
from this set must follow the core. The runner validates the requirement,
but does not consume optional trailing whitespace into the landmark end.
Landmarks must all be found, in slice order, for the chain prefilter to
produce a candidate. Each landmark is satisfied by exactly one matching
alternative; alternatives are tried independently by the runner.
LeadingLoopSet is the unbounded leading set loop that precedes every
landmark in the original concatenation. At run time, after the first
landmark alternative is found, the scanner walks backward over this set
to recover the earliest plausible regex start position.
Negated bool
Range SingleRange
SetChars []rune
String []rune
func (*RegexNode).FindStartingLiteral() *StartingLiteral
Package-Level Functions (total 13)
CharDescription Produces a human-readable description for a single character.
func IsECMAIdentifierChar(r rune) bool func IsECMAIdentifierStartChar(r rune) bool func IsECMAWordChar(r rune) bool
According to UTS#18 Unicode Regular Expressions (http://www.unicode.org/reports/tr18/)
RL 1.4 Simple Word Boundaries The class of <word_character> includes all Alphabetic
values from the Unicode character database, from UnicodeData.txt [UData], plus the U+200C
ZERO WIDTH NON-JOINER and U+200D ZERO WIDTH JOINER.
func NewCharSetRuntime(buf string) CharSet
NewReplacerData will populate a reusable replacer data struct based on the given replacement string
and the capture group data from a regexp
NextGraphemeClusterBoundary returns the first extended-grapheme boundary
after start, or -1 when start is not a valid input position. It implements
the Unicode 17 rules from UAX #29 with a small state machine, avoiding the
backtracking and repeated character-class probes of an equivalent regexp.
Parse converts a regex string into a parse tree
PreviousGraphemeClusterBoundary returns the first extended-grapheme boundary
before end, or -1 when end is not a valid input position.
Package-Level Variables (total 19)
var DigitClass func() *CharSet var ECMAAnyClass func() *CharSet var ECMADigitClass func() *CharSet var ECMASpaceClass func() *CharSet var ECMAWordClass func() *CharSet
ErrReplacementError is a general error during parsing the replacement text
var NotDigitClass func() *CharSet var NotECMADigitClass func() *CharSet var NotECMASpaceClass func() *CharSet var NotECMAWordClass func() *CharSet var NotNewLineClass func() *CharSet var NotRE2SpaceClass func() *CharSet var NotSpaceClass func() *CharSet var NotWordClass func() *CharSet var RE2SpaceClass func() *CharSet var SpaceClass func() *CharSet
Package-Level Constants (total 189)
const AfterChild NodeType = 128
where the regex can be pegged
where the regex can be pegged
where the regex can be pegged
where the regex can be pegged
where the regex can be pegged
where the regex can be pegged
where the regex can be pegged
where the regex can be pegged
const BeforeChild NodeType = 64 const Branchcount InstOp = 28 // back jump,limit branch++ if zero<=c<limit const Branchmark InstOp = 24 // back jump branch first for loop const Capturemark InstOp = 32 // back group define group
Selects and consumes the next character using a disjoint branch table.
Operand 0 is an index into Code.Dispatches.
const ECMABoundary InstOp = 41 // \b const ECMAScript RegexOptions = 256 // "e" const ErrAlternationCantCapture = "alternation conditions do not capture and cannot be named" const ErrAlternationCantHaveComment = "alternation conditions cannot be comments" const ErrBadClassInCharRange = "cannot include class \\%v in character range" const ErrCapNumNotZero = "capture number cannot be zero" const ErrCaptureGroupOutOfRange = "capture group number out of range" const ErrConditionalExpression = "illegal conditional (?(...)) expression" const ErrDuplicateGroupName = "duplicate capture group name" const ErrIllegalEndEscape = "illegal \\ at end of pattern" const ErrIncompleteSlashP = "incomplete \\p{X} character escape"
internal issue
const ErrInvalidCharRange = "invalid character class range" const ErrInvalidECMAGroupName = "invalid capture group name" const ErrInvalidGroupName = "invalid group name: group names must begin with a word character and... const ErrInvalidHex = "hex values may not be larger than 0x10FFFF" const ErrInvalidRepeatOp = "invalid nested repetition operator" const ErrInvalidRepeatSize = "invalid repeat count" const ErrInvalidUTF8 = "invalid UTF-8" const ErrMalformedNameRef = "malformed \\k<...> named back reference" const ErrMalformedReference = "(?(%v) ) malformed" const ErrMalformedSlashP = "malformed \\p{X} character escape" const ErrMissingBrace = "missing closing }" const ErrMissingControl = "missing control character" const ErrMissingParen = "missing closing )" const ErrMissingRepeatArgument = "missing argument to repetition operator" const ErrReversedCharRange = "[%c-%c] range in reverse order" const ErrShorthandClassInCharRange = "cannot create range with shorthand escape sequence \\%v" const ErrSubtractionMustBeLast = "a subtraction must be the last element in a character class" const ErrTooFewHex = "insufficient hexadecimal digits" const ErrTooManyAlternates = "too many | in (?()|)" const ErrUndefinedBackRef = "reference to undefined group number %v" const ErrUndefinedNameRef = "reference to undefined group name %v" const ErrUndefinedReference = "(?(%v) ) reference to undefined group" const ErrUnexpectedParen = "unexpected )" const ErrUnknownSlashP = "unknown unicode category, script, or property '%v'" const ErrUnrecognizedControl = "unrecognized control character" const ErrUnrecognizedEscape = "unrecognized escape sequence \\%v" const ErrUnrecognizedGrouping = "unrecognized grouping construct: (%v" const ErrUnterminatedBracket = "unterminated [] set"
Parser errors
const ExplicitCapture RegexOptions = 4 // "n"
A single character at a fixed distance from the start of the pattern.
One or more sets at a fixed distance from the start of the pattern.
A multi-character case-sensitive string at a fixed distance from the start of the pattern.
Matches one Unicode extended grapheme cluster (\X).
const IgnoreCase RegexOptions = 1 // "i" const IgnorePatternWhitespace RegexOptions = 32 // "x" const Lazybranch InstOp = 23 // back jump straight first const Lazybranchcount InstOp = 29 // back jump,limit same, but straight first const Lazybranchmark InstOp = 25 // back jump straight first for loop
A "beginning" anchor at the beginning of the pattern.
An "end" anchor at the beginning of the pattern. This is rare.
An "endz" anchor at the beginning of the pattern. This is rare.
A "start" anchor at the beginning of the pattern.
A "beginning" anchor at the beginning of the right-to-left pattern.
An "end" anchor at the beginning of the right-to-left pattern. This is rare.
An "endz" anchor at the beginning of the right-to-left pattern. This is rare.
A "start" anchor at the beginning of the right-to-left pattern.
A single character at the start of the right-to-left pattern.
A set starting the pattern.
A set starting the right-to-left pattern.
A multi-character substring at the beginning of the pattern.
A multi-character ordinal case-insensitive substring at the beginning of the pattern.
A multi-character substring at the beginning of the right-to-left pattern.
Multiple leading prefix strings
Multiple leading ordinal case-insensitive prefix strings
A literal (single character, multi-char string, or set with small number of characters) after a non-overlapping set loop at the start of the pattern.
const LowercaseAdd = 1 // Add arg. const LowercaseBad = 3 // Bitwise and with 1 and add original. const LowercaseBor = 2 // Bitwise or with 1. const LowercaseSet = 0 // Set to arg.
MaxPrefixSize is the largest number of runes we'll use for a BoyerMoyer prefix
const Multiline RegexOptions = 2 // "m"
Arbitrary number of repetitions of the same character when we'd prefer to represent that as a repeater of that character rather than a string.
const Nonboundary InstOp = 17 // \B const NonECMABoundary InstOp = 42 // \B const NoSearch FindNextStartingPositionMode = 0 const Notonelazy InstOp = 7 // lef,back char,min,max .{,n}? const Notoneloop InstOp = 4 // lef,back char,min,max .{,n}
Atomic loop of a single character other than the one specified.
Operand 0 is the character. Operand 1 is the max iteration count.
const NtAlternate NodeType = 24 // a|b const NtBackRefCond NodeType = 33 // (?(n) | ) const NtBeginning NodeType = 18 // \A const NtBoundary NodeType = 16 // \b const NtConcatenate NodeType = 25 // ab const NtECMABoundary NodeType = 41 // \b const NtExprCond NodeType = 34 // (?(...) | )
Matches one Unicode extended grapheme cluster (\X).
const NtLazyloop NodeType = 27 // m,x *? +? ?? {,}? const NtNonboundary NodeType = 17 // \B const NtNonECMABoundary NodeType = 42 // \B const NtNotonelazy NodeType = 7 // lef,back char,min,max .{,n}? const NtNotoneloop NodeType = 4 // lef,back char,min,max .{,n}
Atomic loop of a single character other than the one specified.
Operand 0 is the character. Operand 1 is the max iteration count.
NtOnerep NodeType = 0 // lef,back char,min,max a {n}
NtNotonerep NodeType = 1 // lef,back char,min,max .{n}
NtSetrep NodeType = 2 // lef,back set,min,max [\d]{n}
Atomic loop of the specified character.
Operand 0 is the character. Operand 1 is the max iteration count.
Atomic loop of a single character matching the specified set
Operand 0 is index into the strings table of the character class description. Operand 1 is the repetition count.
The following are leaves, and correspond to primitive operations
Updates the bumpalong position to the current position.
Atomic loop of the specified character.
Operand 0 is the character. Operand 1 is the max iteration count.
const RE2 RegexOptions = 512 // RE2 compat mode
A sequence of required landmarks after a leading loop.
const RightToLeft RegexOptions = 64 // "r"
Atomic loop of a single character matching the specified set
Operand 0 is index into the strings table of the character class description. Operand 1 is the repetition count.
const Singleline RegexOptions = 16 // "s" const SpaceCategoryText = " "
An "end" anchor at the end of the pattern, with the pattern always matching a fixed-length expression.
An "endz" anchor at the end of the pattern, with the pattern always matching a fixed-length expression.
const Unicode RegexOptions = 1024 // "u"
Updates the bumpalong position to the current position.
const WordCategoryText = "W"
![]() |
The pages are generated with Golds v0.8.7. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |