Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Java 如何替换字符串中的所有非数字字符?_Java_Regex - Fatal编程技术网

Java 如何替换字符串中的所有非数字字符?

Java 如何替换字符串中的所有非数字字符?,java,regex,Java,Regex,我需要替换字符串中的所有非数字字符。例如: String: 987sdf09870987=-0\\\`42 Replaced: 987**sdf**09870987**=-**0**\\\`**42 这是所有非数字字符序列包装成**字符。如何使用String::replaceAll() 正则表达式与我想要的不匹配。我该怎么做 (\\D+) 您可以使用此选项并替换为**$1**。请参阅演示 您可以对非数字使用一个否定字符类,并使用第0个group back引用来避免捕获组的开销(这是最小的,但

我需要替换字符串中的所有非数字字符。例如:

String: 987sdf09870987=-0\\\`42
Replaced: 987**sdf**09870987**=-**0**\\\`**42
这是所有非数字字符序列包装成
**
字符。如何使用
String::replaceAll()

正则表达式与我想要的不匹配。我该怎么做

(\\D+)
您可以使用此选项并替换为
**$1**
。请参阅演示


您可以对非数字使用一个否定字符类,并使用第0个group back引用来避免捕获组的开销(这是最小的,但仍然是):

看。输出:
987**sdf**09870987**=-**0**\\\`**42

另外,在Java正则表达式中,字符类看起来比多个转义符号更整洁,这就是为什么我更喜欢这种
[^0-9]+
模式,意思是匹配1个或多个(
+
)符号,而不是(因为
^
)从
0
9
[0-9]
)的数字


关于你的
(?![0-9]+$).
regex的几句话。它由一个负前瞻
(?![0-9]+$)
*
组成,前者检查从当前位置开始是否只有数字(如果只有数字到字符串末尾,则匹配失败),后者匹配除换行以外的任何字符。您可以看到它正在做什么的示例。我认为它对您没有帮助,因为您需要实际匹配非数字,而不仅仅是检查是否缺少数字。

string.replaceAll(“[^0-9]”),“)
@SimY4不起作用。我应该把它替换成什么?你是说
string.replaceAll(“\\D+”,“**”)
?那么它就不工作了。我需要将字符序列包装到
**
中,而不仅仅是用
**
来回复它。为什么OP要“尝试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。
(\\D+)
String x = "987sdf09870987=-0\\\\\\`42";
x = x.replaceAll("[^0-9]+", "**$0**");
System.out.println(x);