与下面的模式所以我比较字符串:混乱了Java中的模式匹配
"\"([a-zA-Z]*)\""
我是正确的思维,这意味着它仅允许其中有一个字符串:
- 整整一引号在开头 - \“,
- 末尾有一个引号, - \” - 和;
- 在任意数量的任意小写或大写字母之间 - ([A-ZA-Z] *)
我问这个,因为这是我一直在带领淘StackOverflow上都后,相信和互联网。但是,当我给它一个空字符串时,matches()方法不会抛出PatternSyntaxException异常。我的意思是:
|""| //This is valid or is meant to be
|| //This is invalid or is meant to be
有人照顾我吗?对于上下文,这是用Java编写的。编辑:大家好,我与正则表达式匹配的字符串确实有引号(我要求用户输入引号括起来的消息)。我试图写的代码是:
if(!(components[MESSAGE].matches("^\\"([a-zA-Z]*)$\\"")))
throw new InvalidSyntaxException(" > ERROR: Message must be surrounded by quotation marks.");
其中'InvalidSyntaxException'是一个自定义异常类。
一些例子:
|""| - valid
|| - invalid (quotes required)
|"Example"| - valid
|"The year is 1995"| - invalid (no numbers)
解决:你都是对的 - 我的代码没有做的唯一的事情就是允许邮件里面的空间!这就是为什么它不断抱怨。再次感谢!
我不知道为什么你会认为'匹配()'应该抛出一个异常。它只在一个无效的模式上做,而不是如果它不匹配字符串。任何数字都不包含任何数字,所以'“”'是一个有效的匹配。 – UnholySheep
您需要检查'matches'的'boolean'返回值,不要期待异常。只有在 - 正如其名称所述 - 正则表达式的语法错误时才引发异常。你的语法看起来很好。 – Gene
@Gene,那么错误的语法和语法之间的区别是什么?就像从简单的“虚假”而不是抛出异常一样。 –