gpt4 book ai didi

java - 替换与正则表达式中的字符不匹配的字符

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:33 26 4
gpt4 key购买 nike

我有这个正则表达式:

private static final String SPACE_PATH_REGEX ="[a-z|A-Z|0-9|\\/|\\-|\\_|\\+]+";

我检查我的字符串是否与这个正则表达式匹配,如果不匹配,我想用“_”替换所有不在此处的字符。

我试过这样的:

private static final String SPACE_PATH_REGEX_EXCLUDE =
"[~a-z|A-Z|0-9|\\/|\\-|\\_|\\+]+";
if (myCompanyName.matches(SPACE_PATH_REGEX)) {
myNewCompanySpaceName = myCompanyName;
} else{
myNewCompanySpaceName = myCompanyName.replaceAll(
SPACE_PATH_REGEX_EXCLUDE, "_");
}

但它不起作用...,所以在第二个正则表达式中“~”似乎没有省略以下字符。

有什么想法吗?

最佳答案

您的正则表达式有几个问题(请参阅 Pattern class 了解规则):

  • inside a character class | 没有特殊含义,在您的情况下应该删除而不替换(除非您希望您的字符类包含文字 | 字符)。
  • 同样,您不需要在字符类中转义 /_+
  • -只要不是最后一个字符就需要转义
  • ~ 在字符类中也没有特殊含义,它只是代表自己
  • 您将要使用^ 来否定字符组的内容。

您也可以跳过第一个 matches() 检查,因为如果没有任何匹配项,replaceAll() 调用将返回一个未修改的字符串。保留它(和第二个正则表达式)只会引入另一个可能隐藏错误的地方(例如,您可能不小心更新了一个正则表达式,但没有更新另一个)。

关于java - 替换与正则表达式中的字符不匹配的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com