在 Java 中用正则表达式替换所有功能

ReplaceAll Functionality with Regular Expression In Java

我有一个字符串 "Home 333-666-8888 Do Not Disturb" 并且想从该字符串中提取数字。为此,我在 Java 中找到了具有 ReplaceAll 功能的解决方案。

String ab="Home   333-666-8888  Do Not Disturb";

String bc=ab.replaceAll("[^0-9-]", "");

它给了我 333-666-8888

我担心的是 replaceAll 功能实际上是如何工作的?我曾经假设它会将与正则表达式匹配的东西替换为空白和return我Home Do Not Disturb。但它给了我 333-666-8888。谁能帮助我理解 replaceAll 与正则表达式的工作原理?

你以为^是匹配字符串开头的意思吧?好吧,事实是,它 确实 匹配字符串的开头,但放在字符 class 中时除外。如果它在字符class([])内,则表示"anything except the characters in this character class"。因此,您的正则表达式实际上匹配字符串中除 phone 数字部分以外的所有内容,并将 phone 数字部分以外的所有内容替换为空字符串!

即使它确实意味着匹配字符串的开头,它也不会像您预期的那样工作。因为你的字符串不是以 0-9-.

开头

所以要解决这个问题,只需删除 ^

你对replaceAll方法的理解是正确的 试试这个:

字符串 ab = "333-666-8888";

String bc=ab.replaceAll("[0-9-]", "");