这是一个普遍的问题。我想知道他们的行为有何不同以及为什么,或者只有在我们做错事情时他们的举止才会有所不同?
这就是我目前正在努力解决的问题。 我有这个正则表达式:
CLASS_NAME_VALIDATION_REGEX = "([a-zA-Z_$][a-zA-Z\\d_$]*\\.)*[a-zA-Z_$][a-zA-Z\\d_$]*";
我这样用它:
Pattern.matches(CLASS_NAME_VALIDATION_REGEX, qualifiedClassName)
所以在Unix / Linux下matches()
在Windows上为java.io.Serializable
返回true,它会返回false。
我是否有不正当的逃脱或有其他我不知道的事情?
谢谢,
所以它可能不是问题的正则表达式而且我正在考虑关闭这个问题,因为如果我是对的话,这将是非常不合适的主题。
我目前正在阅读包含类名并使用正则表达式匹配每个名称的文件。每个名字都在一个单独的行上。
Windows和Linux上的回车可能是不同字符的情况吗?
答案 0 :(得分:4)
事实证明问题不在于评论者指出的正则表达式。
对于发现此问题的任何人 java正则表达式在Windows和Linux上的工作方式不同。
实际问题是Linux行以\n
结尾,而在Windows上以\r\n
结尾,而ajb建议我在每个类名的末尾都有一个剩余的\r
。
所以
Pattern.matches("([a-zA-Z_$][a-zA-Z\\d_$]*\\.)*[a-zA-Z_$][a-zA-Z\\d_$]*", "java.io.Serializable\r")
返回false
。
答案 1 :(得分:2)
为我工作
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest
{
private static final Pattern pat = Pattern.compile("([a-zA-Z_$][a-zA-Z\\d_$]*\\.)*[a-zA-Z_$][a-zA-Z\\d_$]*");
public static void main(String[] args) throws IOException
{
String data = "java.io.Serializable";
Matcher m = pat.matcher(data);
System.out.println(m.matches());
}
}
输出:
true