匹配字符串,只包含符号

时间:2015-06-12 09:41:07

标签: java regex string

我正在尝试检查字符串中是否只包含特殊字符。如果它只有!@#$%^&*()_+,我希望它退出。如果其中有一个字母,!@#$%^&*()_+d.我想删除除d.

之外的所有内容

到目前为止,整个字符串的条件只包含似乎不起作用的符号。

if (everything.matches("[-/@#$%^&_+=().]")){
    System.err.println("This only contained symbols, exit");
    System.exit(0);
}

为什么这不起作用? everything也是一个字符串!

此外,我如何检查字符串中是否还有letter.,如果是,请删除除letter和{之外的所有符号{1}}

谢谢。

测试一个字母和.的文件:http://iforce.co.nz/i/ywvy2ev4.tbb.png 测试所有特殊字符:http://iforce.co.nz/i/pw3c2iuf.ccq.png

当我想只匹配字母和.时,

我的everything变量:.

当我想匹配字符时,

我的^&*^&*(^&*(d&*&.*变量:everything

这是我的完整代码,直到我使用正则表达式检查:

%^&^%.##

}

4 个答案:

答案 0 :(得分:0)

你可以使用以下习语只匹配非字母数字(我在这里也添加了非空格):

String[] test = {"!@#$%^&*()_+d.", "@#$%^&*()_+"};
// iterating test cases
for (String s: test) {
    //                 | replacing
    //                 |            | non-alnums/whitespaces
    //                 |            | (character class)
    //                 |            |                 | with empty string
    //                 |            |                 | 
    String replaced = s.replaceAll("[^\\p{Alnum}\\s]", "");
    System.out.printf(
        "Replaced: %s%nNeed to quit? %b%n", 
        replaced, 
        replaced.isEmpty()
    );
}

<强>输出

Replaced: d
Need to quit? false
Replaced: 
Need to quit? true

答案 1 :(得分:0)

粘贴你的表达here,它抱怨未转义的挡板。因此,您需要转义/并将其设为\/

要检查字符串是否包含(英文)字符及其中的句点,您可以使用([a-zA-z].+?\.)|(\..+?[a-zA-z])或更多字符,尝试匹配[A-Za-z]并确保indexOf(".")不匹配产量-1。要删除任何非句号或英文字符的内容,只需使用.replace("[^A-Za-z.]", "")即可。这将删除任何不是字母或句点的内容,并用空字符串替换它。

答案 2 :(得分:0)

你的模式只匹配1次,你应该像这样添加*

if (everything.matches("^[!@#$%^&*()_+]*$")){
    System.err.println("This only contained symbols, exit");
    System.exit(0);
}

答案 3 :(得分:0)

matches检查整个字符串是否可以由正则表达式匹配,但在

everything.matches("[-/@#$%^&_+=().]")

正则表达式只能匹配一个字符,因此您可以添加

  • *使用量词来匹配该类型的零个或多个字符,
  • +量词,让它匹配该类型的一个或多个字符

因此,假设您也不想传递空字符串,可以使用

everything.matches("[-/@#$%^&_+=().]*")

现在关于d.部分..您可以在已提及的条件之后添加另一个条件,以检查此时它是否还包含d.和它们删除除

之类的字符以外的所有内容
if (everything.matches("[-/@#$%^&_+=().]*")){
    System.err.println("This only contained symbols, exit");
    System.exit(0);
}else if(everything.matches("[-/@#$%^&_+=()d.]*")){
    //lets remove every character which is not `d` or `.`
    everything = everything.replaceAll("[^d.]","");
}

编辑:

你的正则表达式中错过了*个字符。试试

if (everything.matches("[-/@#$%^&_+=()*.]")){
    System.err.println("This only contained symbols, exit");
    System.exit(0);
}else if(everything.matches("[-/@#$%^&_+=()*d.]*")){
    //lets remove every character which is not `d` or `.`
    everything = everything.replaceAll("[^d.]","");
    System.out.println(everything);
}

或者,如果您想接受任何字母,请将d替换为a-zA-Z