Java 正则表达式替换所有非a-Z的前导字符

Java 正则表达式替换所有非a-Z的前导字符,java,regex,Java,Regex,我需要替换出现在任何字母前面的所有非字母字符 比如说 $%5hello w8r^ld变为hello w8r^ld 我现在得到的这个正则表达式非常适合替换非单词字符,但不能替换数字 s.replaceFirst("^[\\W_]+", "") 您使用了错误的字符类。使用 s.replaceFirst("^[^a-zA-Z]+", "") 就是 ^ start at the beginning of the string [^ ]+ one or more (gree

我需要替换出现在任何字母前面的所有非字母字符 比如说

$%5hello w8r^ld变为hello w8r^ld

我现在得到的这个正则表达式非常适合替换非单词字符,但不能替换数字

s.replaceFirst("^[\\W_]+", "")

您使用了错误的字符类。使用

s.replaceFirst("^[^a-zA-Z]+", "")
就是

^          start at the beginning of the string
[^  ]+     one or more (greedy - keep going until you hit a letter
a-zA-Z     ascii characters between a-z or A-Z

根据@anubhava的评论,我将
*
更改为
+
。如果没有匹配项,则无需更换。它实际上更干净。

如果没有什么,为什么还要麻烦用
@anubhava fair point替换它呢?我喜欢让我的表达式与我所说的匹配。。。“如果有这样的事”。我猜
+
的意思是“只有在有值得替换的东西时才替换”。我相应地更新了我的答案。
\\w
的意思是“单词字符”,但它实际上意味着在大多数语言中可以作为标识符的字符,即
A-Z
A-Z
0-9
,以及
<代码>\\W表示除这些以外的所有内容。这就是为什么它没有替换数字。您可以使用
[\\W\ud]
重新添加数字,就像您已经使用
一样,但我认为
[^A-Za-z]
更清晰。