所以我将字符串与以下模式进行比较:
"\"([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)
解决:你没事 - 我的代码唯一没做的就是在消息中留出空格!这就是为什么它一直在抱怨。再次感谢!
答案 0 :(得分:1)
您可能希望删除正则表达式两端的"
:
\"([a-zA-Z]*)\"
我建议你使用regex101来测试你的正则表达式。
编辑:正如其他答案中所说,你需要在使用之前编译模式:
Pattern pattern = Pattern.compile("\"([a-zA-Z]*)\"")
if(!pattern.matches(components[MESSAGE]))
throw new InvalidSyntaxException(" > ERROR: Message must be surrounded by quotation marks.");
答案 1 :(得分:1)
要在字符串的开头结束\"
,请使用^
和$
:
^\"([a-zA-Z]*)\"$
这应该只找到以"
开头和结尾的匹配项。
答案 2 :(得分:1)
所以抛出PatternSyntaxException“表示正则表达式模式中的语法错误。”我不希望你通过检查空字符串来获得它。
你可能反驳了这些论点吗? (您尚未发布代码。)
您应该将正则表达式传递给att1
。然后,您将要签出的字符串传递给...
Patter.compile()
或者,如果您使用myPattern.matcher("my_string").matches();
,则首先使用正则表达式模式。
答案 3 :(得分:1)
与各种解析方法不同,如果输入与模式不匹配,matches()
不会抛出异常,它只返回true
或false
。
像这样使用:
if (input.matches("\"[a-zA-Z]*\""))
// input is OK
请注意,括号是不必要的(因为它们与^
暗示为$
或尾随matches()
。
答案 4 :(得分:0)
希望这段代码有用。
centered
打印
public class Foo {
static void check(String s) {
System.out.println("Match |" + s + "| = "
+ Pattern.matches("\"([a-zA-Z]*)\"", s));
}
public static void main(String[] args) {
check("\"foo\""); // Should be true
check("\"123\""); // Should be false
check("\"\""); // should be true
check("foo"); // Should be false
check(""); // Should be false
}
}