2

这是一个普遍的问题。我想知道他们的行为是否不同以及为什么,或者只有当我们做错事时他们才会有不同的行为?

这就是我目前正在努力解决的问题。我有这个正则表达式:

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()返回 true,而java.io.Serializable在 Windows 上返回 false。

我是否有不恰当地逃脱了某些事情,或者还有其他我不知道的事情?

谢谢,


所以问题可能不是正则表达式,我正在考虑关闭这个问题,因为如果我是对的,这将是非常离题的。

我目前正在读取一个包含类名并将每个名称与正则表达式匹配的文件。每个名称都在单独的行上。

Windows和Linux上的回车符可能是不同字符的情况吗?

4

2 回答 2

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

于 2013-10-30T18:22:23.217 回答
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
于 2013-10-30T17:53:12.243 回答