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