我有一个遵循public void openDialog(){
final AlertDialog.Builder alertDialogBuilder =
new AlertDialog.Builder(this);
AlertDialog alert = alertDialogBuilder.create();
LayoutInflater inflater = getLayoutInflater();
alertDialogBuilder.setView(inflater.inflate(R.layout.list_example, null));
final EditText a = (EditText) alert.findViewById(R.id.kekekeke);
alertDialogBuilder .setMessage("Enter a New Name")
.setPositiveButton("Edit Name", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
myRef.child(Utils.object.getKey()).child("sfasf").setValue(a.getText().toString());
}
})
的正则表达式。我想在正则表达式的第一个匹配项之前插入一个子字符串。我在Golang中寻找纯正则表达式解决方案,但没有找到索引,然后添加了子字符串。由于Golang仅具有regexp.ReplaceAll函数,它将替换所有匹配项,而不是第一个匹配项。
(ORDER\s+BY)|(LIMIT)|$
示例
输入:exp := regexp.MustCompile(`(ORDER\s+BY)|(LIMIT)|$`)
fmt.Println(exp.ReplaceAllString(str, "..."))
子串= abcd ORDER BY LIMIT
预期输出:GROUP BY
输入:abcd GROUP BY ORDER BY LIMIT
预期输出:abcd LIMIT
答案 0 :(得分:2)
您可以使用
str := "abcd ORDER BY LIMIT"
exp := regexp.MustCompile(`^(.*?)(ORDER\s+BY|LIMIT|$)`)
fmt.Println(exp.ReplaceAllString(str, "${1}GROUP BY ${2}"))
如果在模式之前可以使用换行符,请在前面使用(?s)
。{p>
请参见Go demo和regex graph:
详细信息
(?s)^(.*?)(ORDER\s+BY|LIMIT|$)
-字符串的开头^
-组1((.*?)
):任意0个以上的字符,数量尽可能少${1}
-第2组((ORDER\s+BY|LIMIT|$)
):三种选择中的任何一种,以先到者为准:
${2}
-ORDER\s+BY
,1个以上的空格,ORDER
BY
-一个LIMIT
子字符串LIMIT
-字符串的结尾。答案 1 :(得分:0)
我的猜测是,该表达式可能在这里起作用:
(ORDER\s+BY\s+LIMIT|LIMIT)$
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))
}