正则表达式无效

时间:2011-04-19 21:00:38

标签: java regex pattern-matching

我试图将我的模式与java上的地址相匹配。

String regex = "[a-zA-Z0-9,\\.\']";
if(!address.matches(regex)) {
  //do something
}

基本上,我希望检测除,.'以外的所有特殊字符。 使用上面的代码,我的地址

  

4700 Keele Street,North York,ON

不应该进入if条件。为什么会这样? 另外你如何逃脱一个特殊的角色?不应该是\$吗? Eclipse IDE会提示错误说明

  

“无效的转义序列(有效转义序列   是\ b \ t \ n \ f \ r \“\'\)”

当我\$\^时。

6 个答案:

答案 0 :(得分:4)

我不相信你需要逃避集合中的大多数角色。如前所述,您需要包含空格并使用'+'捕获其中的一个或多个:

String regex = "[a-zA-Z0-9,.' ]+";

答案 1 :(得分:2)

试试这个。

[a-zA-z0-9,'\\.\s]

您还需要匹配空格。你的表达式不包含空格,因此地址不匹配。

答案 2 :(得分:2)

你的模式中有一些错误:

  • 您需要能够匹配空格字符,这不在您允许的字符列表中。

  • 你需要附加*或+以允许一系列字符 - 现在你只是要求匹配列表中元素的 1次

所以你想要[a-zA-Z0-9\\ ,]之类的内容以及你想要允许的其他任何转义字符。

答案 3 :(得分:0)

查看匹配的java文档()。它会告诉你整个字符串必须与正则表达式匹配才能返回true。您只想检查字符串中是否有某些字符出现。因此,您应该使用find()。 matches()方法很肤浅,当写一个“^ regex $”时,它总是可以被find()替换。

答案 4 :(得分:0)

matches检测整个地址字符串是否与表达式匹配。并且您的表达式只能与单个字符匹配。在正则表达式的末尾添加+以匹配一个或多个接受的字符。

答案 5 :(得分:0)

编辑:已从错误 - py“更改为 correctus-javonian ...

问题的解决方案是找到一个无效字符。如果:[a-zA-Z0-9,\\.' ]匹配有效字符,则:[^a-zA-Z0-9,\\.' ]匹配无效字符。如果我们可以找到其中一个,那么该字符串无效 - 否则整个字符串是有效的。这是一个经过测试的脚本:

import java.util.regex.*;
public class TEST {
    public static void main(String[] args) {
        String s = "Test string with no invalid characters.";
        // Match just one non-valid character.
        String re = "[^a-zA-Z0-9,\\.' ]";
        Pattern p = Pattern.compile(re);
        Matcher m = p.matcher(s);
        if (m.find()) {
            System.out.println("Invalid char found.");
        } else {
            System.out.println("No invalid char found.");
        }
    }
}