v1.16.9
ADDED: * netx.IsPub * encodingx/hexx Rest are mostly small corrections and docs
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
- write a flag parser/converter for github.com/scorpionknifes/go-pcre (and github.com/GRbit/go-pcre) :
|
||||
----
|
||||
// i CASELESS
|
||||
// m MULTILINE
|
||||
// s DOTALL
|
||||
// x EXTENDED
|
||||
// U UNGREEDY
|
||||
// 8 UTF8 (non-standard flag letter; standard PCRE uses (*UTF8) outside (?...) syntax)
|
||||
//
|
||||
// Flags after a '-' inside group disable associated flag and are ignored
|
||||
// (applies inside the regex engine once prefix is stripped).
|
||||
// pattern, flags := ParsePrefixFlags(`(?im)^hello`)
|
||||
// re := pcre.MustCompile(pattern, flags)
|
||||
func ParsePrefixFlags(pattern string) (string, int) {
|
||||
if !strings.HasPrefix(pattern, "(?") {
|
||||
return pattern, 0
|
||||
}
|
||||
|
||||
end := strings.IndexByte(pattern, ')')
|
||||
if end < 0 {
|
||||
return pattern, 0
|
||||
}
|
||||
|
||||
inner := pattern[2:end] // everything between "(?" and ")"
|
||||
|
||||
for _, ch := range inner {
|
||||
if !strings.ContainsRune("imsxU8-", ch) {
|
||||
return pattern, 0
|
||||
}
|
||||
}
|
||||
|
||||
positive := inner
|
||||
if dash := strings.IndexByte(inner, '-'); dash >= 0 {
|
||||
positive = inner[:dash]
|
||||
}
|
||||
|
||||
var flags int
|
||||
for _, ch := range positive {
|
||||
switch ch {
|
||||
case 'i':
|
||||
flags |= pcre.CASELESS
|
||||
case 'm':
|
||||
flags |= pcre.MULTILINE
|
||||
case 's':
|
||||
flags |= pcre.DOTALL
|
||||
case 'x':
|
||||
flags |= pcre.EXTENDED
|
||||
case 'U':
|
||||
flags |= pcre.UNGREEDY
|
||||
case '8':
|
||||
flags |= pcre.UTF8
|
||||
}
|
||||
}
|
||||
|
||||
return pattern[end+1:], flags
|
||||
}
|
||||
----
|
||||
Reference in New Issue
Block a user