我试图将我的模式与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 \“\'\)”
当我\$
或\^
时。
答案 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.");
}
}
}