Java 允许使用逗号和句点的正则表达式

Java 允许使用逗号和句点的正则表达式,java,regex,Java,Regex,我试着搜索这个问题的答案,同时也阅读了Regex维基,但我找不到确切的答案 我有一个验证文档的程序。(是别人写的) 如果某些行或字符与正则表达式不匹配,则会生成错误。我注意到总是会产生一些错误,我想纠正这一点。我相信我已将问题缩小到以下方面: 以下是一个例子: 此错误由程序逻辑标记: ERROR: File header immediate origin name is invalid: CITIBANK, N.A. 以下是导致该错误的代码: if(strLine.substring(63,

我试着搜索这个问题的答案,同时也阅读了Regex维基,但我找不到确切的答案

我有一个验证文档的程序。(是别人写的)

如果某些行或字符与正则表达式不匹配,则会生成错误。我注意到总是会产生一些错误,我想纠正这一点。我相信我已将问题缩小到以下方面:

以下是一个例子:

此错误由程序逻辑标记:

ERROR: File header immediate origin name is invalid: CITIBANK, N.A. 
以下是导致该错误的代码:

if(strLine.substring(63,86).matches("[A-Z,a-z,0-9, ]+")){

                                }else{
                                    JOptionPane.showMessageDialog(null, "ERROR: File header immediate origin name is invalid: "+strLine.substring(63,86));
                                    errorFound=true;
                                    fileHeaderErrorFound=true;
                                    bw.write("ERROR: File header immediate origin name is invalid: "+strLine.substring(63,86));
                                    bw.newLine();
我认为在运行时调用错误的原因是因为文本包含句点和逗号。。我不确定如何在正则表达式中允许这些

我试过用这个

if(strLine.substring(63,86).matches("[A-Z,a-z,0-9,,,. ]+")){

它似乎起了作用,我只是想确定这是正确的方法,因为它看起来不正确

您的分析是对的,匹配失败是因为文本中有一个点未包含在文本中

但是,您可以简化正则表达式-无需重复逗号,它们在类中没有任何特殊意义:

if(strLine.substring(63,86).matches("[A-Za-z0-9,. ]+"))

但是,您确定永远不必匹配非ASCII字母或任何其他类型的标点符号吗?

您的分析是对的,匹配失败是因为文本中有一个点未包含在文本中

但是,您可以简化正则表达式-无需重复逗号,它们在类中没有任何特殊意义:

if(strLine.substring(63,86).matches("[A-Za-z0-9,. ]+"))

您确定您永远不必匹配非ASCII字母或任何其他类型的标点符号吗?

字母和数字:a-zA-Z0-9可以有效地替换为\w表示“单词”。 句点和逗号不需要转义,可以按原样使用。因此,这个正则表达式可能会派上用场:

"[\w,.]"

希望这有帮助。:)

字母和数字:a-zA-Z0-9可以有效地替换为\w表示“单词”。 句点和逗号不需要转义,可以按原样使用。因此,这个正则表达式可能会派上用场:

"[\w,.]"

希望这有帮助。:)

@Thomas:No.字符类中唯一需要转义的字符是
]
^
-
是另外两个重要的元字符,如果正确放置它们,也不必转义它们。@TimPietzcker是的。正如我所说的,我没有彻底阅读这个问题,所以这对我来说是一个误解。@Thomas:没有。在字符类中,你必须转义的唯一字符是
]
^
-
是另外两个重要的元字符,如果正确放置它们,也不必转义它们。@TimPietzcker是的。我说我没有彻底地读到这个问题,所以我这边的误解。谢谢你的回答!我很确定句号是唯一的标点符号。这些文件与银行有关,具有非常严格的格式标准。原著的作者可能没有想到句号,因为除了逗号之外还有一些句号。再次感谢您的回复,我可以修复我的代码并删除我的三个逗号。作者在beanshell中也做了原作,我把它移到Eclipse中,所以beanshell中可能有一些不同之处。谢谢你的回复!我很确定句号是唯一的标点符号。这些文件与银行有关,具有非常严格的格式标准。原著的作者可能没有想到句号,因为除了逗号之外还有一些句号。再次感谢您的回复,我可以修复我的代码并删除我的三个逗号。作者在beanshell中也做了原作,我把它移到Eclipse中,所以beanshell中可能有一些不同之处。JSON。