case insenstive regexp search
parent
72894cd5cc
commit
5be556a4cf
|
|
@ -2,17 +2,21 @@ package notes
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"local/notes-server/filetree"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
func (n *Notes) Search(phrase string) (string, error) {
|
||||
pattern, err := regexp.Compile("(?i)" + phrase)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
files := filetree.NewFiles()
|
||||
err := filepath.Walk(n.root,
|
||||
err = filepath.Walk(n.root,
|
||||
func(walked string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -23,7 +27,7 @@ func (n *Notes) Search(phrase string) (string, error) {
|
|||
if size := info.Size(); size < 1 || size > (5*1024*1024) {
|
||||
return nil
|
||||
}
|
||||
ok, err := grepFile(walked, []byte(phrase))
|
||||
ok, err := grepFile(walked, pattern)
|
||||
if err != nil && err.Error() == "bufio.Scanner: token too long" {
|
||||
err = nil
|
||||
}
|
||||
|
|
@ -40,7 +44,7 @@ func (n *Notes) Search(phrase string) (string, error) {
|
|||
return filetree.Paths(*files).List(true), err
|
||||
}
|
||||
|
||||
func grepFile(file string, phrase []byte) (bool, error) {
|
||||
func grepFile(file string, pattern *regexp.Regexp) (bool, error) {
|
||||
f, err := os.Open(file)
|
||||
if err != nil {
|
||||
return false, err
|
||||
|
|
@ -48,7 +52,7 @@ func grepFile(file string, phrase []byte) (bool, error) {
|
|||
defer f.Close()
|
||||
scanner := bufio.NewScanner(f)
|
||||
for scanner.Scan() {
|
||||
if bytes.Contains(scanner.Bytes(), phrase) {
|
||||
if pattern.Match(scanner.Bytes()) {
|
||||
return true, scanner.Err()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue