mirror of
https://github.com/golang/go
synced 2024-11-25 07:17:56 -07:00
regexp: add HasMeta and regexp.Expr().
The former is a boolean function to test whether a string contains a regular expression metacharacter; the second returns the string used to compile the regexp. R=gri, rsc CC=golang-dev https://golang.org/cl/3728041
This commit is contained in:
parent
be45ba712b
commit
5bd4094d2e
@ -269,6 +269,18 @@ func TestQuoteMeta(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHasMeta(t *testing.T) {
|
||||||
|
for _, tc := range quoteMetaTests {
|
||||||
|
// HasMeta should be false if QuoteMeta returns the original string;
|
||||||
|
// true otherwise.
|
||||||
|
quoted := QuoteMeta(tc.pattern)
|
||||||
|
if HasMeta(tc.pattern) != (quoted != tc.pattern) {
|
||||||
|
t.Errorf("HasMeta(`%s`) = %t; want %t",
|
||||||
|
tc.pattern, HasMeta(tc.pattern), quoted != tc.pattern)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type numSubexpCase struct {
|
type numSubexpCase struct {
|
||||||
input string
|
input string
|
||||||
expected int
|
expected int
|
||||||
|
@ -119,7 +119,11 @@ func build(n int, x ...int) [][]int {
|
|||||||
|
|
||||||
func TestFind(t *testing.T) {
|
func TestFind(t *testing.T) {
|
||||||
for _, test := range findTests {
|
for _, test := range findTests {
|
||||||
result := MustCompile(test.pat).Find([]byte(test.text))
|
re := MustCompile(test.pat)
|
||||||
|
if re.Expr() != test.pat {
|
||||||
|
t.Errorf("Expr() = `%s`; should be `%s`", re.Expr(), test.pat)
|
||||||
|
}
|
||||||
|
result := re.Find([]byte(test.text))
|
||||||
switch {
|
switch {
|
||||||
case len(test.matches) == 0 && len(result) == 0:
|
case len(test.matches) == 0 && len(result) == 0:
|
||||||
// ok
|
// ok
|
||||||
|
@ -599,6 +599,11 @@ Loop:
|
|||||||
re.prefix = string(b)
|
re.prefix = string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Expr returns the source text used to compile the regular expression.
|
||||||
|
func (re *Regexp) Expr() string {
|
||||||
|
return re.expr
|
||||||
|
}
|
||||||
|
|
||||||
// Compile parses a regular expression and returns, if successful, a Regexp
|
// Compile parses a regular expression and returns, if successful, a Regexp
|
||||||
// object that can be used to match against text.
|
// object that can be used to match against text.
|
||||||
func Compile(str string) (regexp *Regexp, error os.Error) {
|
func Compile(str string) (regexp *Regexp, error os.Error) {
|
||||||
@ -998,6 +1003,18 @@ func QuoteMeta(s string) string {
|
|||||||
return string(b[0:j])
|
return string(b[0:j])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HasMeta returns a boolean indicating whether the string contains
|
||||||
|
// any regular expression metacharacters.
|
||||||
|
func HasMeta(s string) bool {
|
||||||
|
// A byte loop is correct because all metacharacters are ASCII.
|
||||||
|
for i := 0; i < len(s); i++ {
|
||||||
|
if special(int(s[i])) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Find matches in slice b if b is non-nil, otherwise find matches in string s.
|
// Find matches in slice b if b is non-nil, otherwise find matches in string s.
|
||||||
func (re *Regexp) allMatches(s string, b []byte, n int, deliver func([]int)) {
|
func (re *Regexp) allMatches(s string, b []byte, n int, deliver func([]int)) {
|
||||||
var end int
|
var end int
|
||||||
|
Loading…
Reference in New Issue
Block a user