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
}
}
+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 {
input string
expected int
func TestFind(t *testing.T) {
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 {
case len(test.matches) == 0 && len(result) == 0:
// ok
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
// object that can be used to match against text.
func Compile(str string) (regexp *Regexp, error os.Error) {
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.
func (re *Regexp) allMatches(s string, b []byte, n int, deliver func([]int)) {
var end int