将正则表达式与引号匹配?

时间:2012-11-01 17:45:28

标签: java regex string expression

我有一个需要使用正则表达式读取的文件。字符串基本上可以包含任何内容(大写,小写,空格,符号等),只要该行不超过60个字符即可。我尝试的方法适用于文件中的大多数字符串,但是,我需要能够允许引号,这是我被卡住的地方。这是我到目前为止所尝试的内容。

    else if (data.matches("[A-Za-z0-9 ,.?!%&()@$-_:;\\\"]+$")
            && !label.equals("") && prompt.equals("") && data.length() <= 60)
        {
            prompt = data;
        }

除了以下字符串

外,它还能正常读取所有其他内容
    Yes, but an error is displayed, “Fuser out.”

不要问拼写,这是我给出的示例文件中的内容。

感谢您的帮助,希望我能在离开自助洗衣店之前得到回应,因为我在长岛上并且由于飓风而在家里没有电源或互联网。

4 个答案:

答案 0 :(得分:2)

在正则表达式中添加\",例如下面:

  data.matches("[A-Za-z0-9 ,.?!%&()@$-_:;\"\\]+$")

使用\"时,它会使用"作为匹配的文字。

答案 1 :(得分:0)

这是代码中的复制粘贴

 "Yes, but an error is displayed, \"Fuser out.\"".matches("[A-Za-z0-9 ,.?!%&()@$-_:;\\\"]+$"));

然后它返回true,所以没关系。

但是当我从你的代码中复制粘贴时,我遇到了问题。字符串“在你的字符串中”Fuser out。“是一个不同于你的正则表达式的字符?”

答案 2 :(得分:0)

您可能遇到与该字符串匹配的问题,因为它使用smart quotes。以下文章提供了一些很好的信息:Handy regexes for smart quotes

摘要是您可以使用以下Unicode转义符将这些字符添加到正则表达式中:

\u201C\u201D\u201E\u201F\u2033\u2036

此外,在您的正则表达式(Java字符串中为\")中使用\\\"时,您似乎打算在字符类中同时允许使用反斜杠和双引号。这不符合你的想法,\"只匹配正则表达式中的文字"字符,它只是有一个不必要的反斜杠。要将反斜杠实际包含为有效字符,您需要在java字符串中连续使用四个反斜杠。

您还需要转义连字符,否则$-_将被解释为字符范围。

所以你的新正则表达式看起来像这样:

data.matches("[A-Za-z0-9 ,.?!%&()@$\\-_:;\\\\\"\\u201C\\u201D\\u201E\\u201F\\u2033\\u2036]+$")

答案 3 :(得分:0)

如果有人感兴趣的话,我最终会简化它。

    if (data.matches("\n"))
        {
            // do nothing, ignore
        }
        else if (data.matches("[^ ]+$") && label.equals("")
            && data.length() <= 60)
        {
            label = data;
        }

        else if (data.matches(".+$")
            && !label.equals("") && prompt.equals("") && data.length() <= 60)
        {
            prompt = data;
        }

        else if (data.matches(".+$")
            && !label.equals("") && !prompt.equals("") && message.equals("")
            && data.length() <= 60)
        {
            message = data;
        }

        else if (data.matches("[^ ]+[ ]+[0-9]$") && label.equals("")
            && prompt.equals("") && message.equals("") && data.length() <= 60)
        {
            children = data;
            String[] info = children.split("[ ]+");
            parent = info[0];
            numChildren = Integer.parseInt(info[1]);

            tree.getNodeReference(parent).setNumChildren(numChildren);
        }