我希望得到一个只接受小写字母数字字符或-
的字符串。如果字符串包含任何其他字符,则应将其替换为-
。
我尝试使用前瞻性否定的下面的正则表达式,但它最后添加了额外的-
。我怎样才能解决这个问题?
public string sampleTest() {
String name = "test-7657-hello.WOrld"
return name.toLowerCase().replaceAll("(?![a-z0-9]([-a-z0-9]*[a-z0-9])?)", "-")
}
例如:在上面的例子中,应该用-
替换点。
答案 0 :(得分:2)
正则表达式:([^a-z0-9-])
让Java [^a-z0-9-]
匹配列表中不存在的单个字符,以便-
替换它们。
<强>详情:
[^]
匹配列表a-z 0-9 -
()
捕获小组<强>输出强>:
test-7657-hello---rld
答案 1 :(得分:1)
如果您想用连字符替换每个字符,请使用/[^a-z0-9-]/g
:
abcd%$^.efg --> abcd----efg
要替换整个无效的子字符串,请使用/[^a-z0-9-]+/g
:
abcd%$^.efg --> abcd-efg
最后,我热烈建议您阅读正则表达式的/g
(全局标志)属性。下次你会省力的。