Это должно делать то, что вы хотите:
(?i:(http)|(error))
Вы можете заменить http
и error
на любые другие ключевые слова, которые вы ищете.
Для этого на Голанге:
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
keywords := []string{
"error",
"http",
}
p := "(?i:(" + strings.Join(keywords, ")|(") + "))"
text := `
Gran Turismo Sport
Shipment Error
Attempt
https://
`
re := regexp.MustCompile(p)
fmt.Println(re.MatchString(text))
}
Вы можете проверить это на игровой площадке Golang:
https://play.golang.org/p/XOhNVBCh8Pt
РЕДАКТИРОВАТЬ:
На основании нового ограничения невозможностичтобы использовать символ |
, я бы посоветовал вам выполнить поиск следующим образом:
(?i:(error)?(http)?)
Это всегда будет возвращать true (или список пустых строк в find all), кромеХорошо, что вы можете отфильтровать все пустые строки, и в результате вы получите желаемый результат.
Вот пример этой работы на игровой площадке Golang:
https://play.golang.org/p/miVC0hdLtQc
РЕДАКТИРОВАТЬ 2: Если вы хотите убедиться, что ВСЕ ключевые слова находятся в тексте, измените ?
в регулярном выражении с {1,}
.Также вам больше не нужен цикл.
(?i:(error){1,}(http){1,})
Это пример работы на игровой площадке Golang
https://play.golang.org/p/f9eFcvObDsA