在 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-]", "");
我有一个字符串 "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-]", "");