Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何替换任何语言的所有非字母数字?_Regex_Go - Fatal编程技术网

Regex 如何替换任何语言的所有非字母数字?

Regex 如何替换任何语言的所有非字母数字?,regex,go,Regex,Go,使用golang中的正则表达式,我想用-替换任何语言的所有非字母数字字符,以便生成漂亮的URL: 是我尝试过的许多正则表达式之一: 包干管 import ( "fmt" "regexp" ) const sample = `سلام دنیا hello world 1 %^&` func main() { var re = regexp.MustCompile(`~[\p{L}0-9\s]+`) s := re.ReplaceAllString(sa

使用golang中的正则表达式,我想用
-
替换任何语言的所有非字母数字字符,以便生成漂亮的URL:

是我尝试过的许多正则表达式之一:

包干管

import (
    "fmt"
    "regexp"
)

const sample = `سلام دنیا hello world 1 %^&`

func main() {
    var re = regexp.MustCompile(`~[\p{L}0-9\s]+`)
    s := re.ReplaceAllString(sample, `-`)
    fmt.Println(s)
} 
输出应为:
hello-world-1


但它不起作用。如何修复它?

为什么一开始就使用
~
?如果要使用否定集,请在括号内使用
^
[^…]
。此外,如果要替换空白,请不要在否定集定义中包含
\s

[^\p{L}0-9]+

首先,您必须准确定义“任何语言的非字母数字”的含义。并非所有语言都使用字母书写,例如汉语。是否要将所有中文书写转换为
-
?或者你只是想保留未修饰的拉丁字母表?我不在乎中文/日文/韩文等等。与我有关的语言是欧洲语言、阿拉伯语和波斯语,它们要么是从左到右,要么是从右到左。正则表达式还应该将空格转换为
-
,所以我要找的是
[^\p{L}0-9\s]+[\040]
。请更新,我会接受。谢谢为什么排除集中没有空格的
[^\p{L}0-9]+
呢?正如我所说的,我想把字符串变成slug,所以空格需要用
-
替换。像这样:?我想我明白你的意思了,但我想我们可以在这里使用更简单的正则表达式:)对,这更优雅!