Regex 如何在Golang正则表达式的第一个匹配之前插入子字符串?
我有一个正则表达式,如下所示Regex 如何在Golang正则表达式的第一个匹配之前插入子字符串?,regex,go,Regex,Go,我有一个正则表达式,如下所示(ORDER\s+BY)|(LIMIT)|$。我想在正则表达式的第一个匹配之前插入一个子字符串。我在Golang中寻找一个纯regexp解决方案,没有找到索引,然后添加一个子字符串。因为Golang只有regexp.ReplaceAll func,它将替换所有匹配项,而不是第一个匹配项 exp := regexp.MustCompile(`(ORDER\s+BY)|(LIMIT)|$`) fmt.Println(exp.ReplaceAllString(str, ".
(ORDER\s+BY)|(LIMIT)|$
。我想在正则表达式的第一个匹配之前插入一个子字符串。我在Golang中寻找一个纯regexp解决方案,没有找到索引,然后添加一个子字符串。因为Golang只有regexp.ReplaceAll func,它将替换所有匹配项,而不是第一个匹配项
exp := regexp.MustCompile(`(ORDER\s+BY)|(LIMIT)|$`)
fmt.Println(exp.ReplaceAllString(str, "..."))
范例
输入:abcd按限制排序
substring=GROUP BY
预期输出:abcd按订单分组按限额
输入:abcd限制
预期输出:abcd按限制分组
您可以使用
str := "abcd ORDER BY LIMIT"
exp := regexp.MustCompile(`^(.*?)(ORDER\s+BY|LIMIT|$)`)
fmt.Println(exp.ReplaceAllString(str, "${1}GROUP BY ${2}"))
如果图案前可能有换行符,请使用前面的(?s)
:(?s)^(.*)(订单\s+按|限制|$)
请参阅和:
详细信息
-字符串的开头^
-组1((.*)
):任何0+字符,尽可能少${1}
-第2组((ORDER\s+BY | LIMIT |$)
):三种备选方案中的任何一种,以先到者为准:${2}
-ORDER\s+BY
,1+空格,ORDER
BY
-一个限制
子字符串限制
-字符串结束$
(ORDER\s+BY\s+LIMIT|LIMIT)$
试验
regexp.MustCompile(`^(.*)(ORDER\s+BY | LIMIT |$)`).ReplaceAllString(str,${1}GROUP BY${2}”)
,请参阅。非常感谢您解决了这个问题。如果你愿意回答,我可以把它关上@你为什么改变了原来的表达方式?OP不需要更改它,只需在模式第一次出现之前添加文本。此外,ReplaceAllString
将替换所有匹配项。
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)(ORDER\s+BY\s+LIMIT|LIMIT)$`)
var str = `abcd ORDER BY LIMIT
abcd LIMIT`
var substitution = "GROUP BY $1"
fmt.Println(re.ReplaceAllString(str, substitution))
}