将正则表达式与内部的引号匹配



我有一个文件,需要使用正则表达式读取。只要线不超过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.”

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

感谢您的任何帮助,希望我在离开自助洗衣店之前得到答复,因为我在长岛上,由于飓风而在家里没有电力或互联网。

在您的正则表达式中添加 ",例如下图:

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

在使用"的情况下,它将使用"作为字面匹配的字面。

这是您的代码复制粘贴

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

它返回真实,所以还可以。

但是,当我从您的代码中进行复制糊状时,我有问题。字符"在您的字符串"中"定影"。"与您的正则表达式中的特征不同?

如果有人有兴趣,这就是我最终简化它的方式。

    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);
        }

您可能遇到与该字符串相匹配的问题,因为它使用了智能报价。以下文章对此有一些很好的信息:智能报价的Handy Regexes

摘要是您可以使用以下Unicode Escapes将这些字符添加到正则态度:

u201Cu201Du201Eu201Fu2033u2036

此外,看起来您当前打算通过在REGEX中使用"(Java字符串中的\")在角色类中允许背斜线和双引号。这并不是您认为这是的事情,"只会匹配您的正则表达式中的字面 "字符,它只是不必要的后斜线。要实际包含后斜线作为有效字符,您需要在Java字符串中连续四个反斜线。

您还需要逃脱连字符,否则$-_被解释为角色范围。

所以您的新正则是这样:

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

最新更新