当正则表达式的第一个字符是*时,Java PatternSyntaxException

时间:2015-08-29 23:33:35

标签: java regex

所以我有这段Java代码:

var Item = Parse.Object.extend("user");
$("#saveNewBudgetAmount").click(function(){
    var newBudget = $("#newBudgetSum").val();
    var currentUser = Parse.User.current();
    var newItem = new Item();
    var query = new Parse.Query(Item);
    newItem.set("budget",newBudget);
    query.equalTo("user", currentUser);



    newItem.save(null, {
        success: function() {
            location="MainPage.html";
        },
        error: function(user, error) {
            alert("Error: " + error.code + " " + error.message);
        }
    });

然而,当我运行它时,我收到以下错误:

  

线程“main”中的异常java.util.regex.PatternSyntaxException:在索引0附近悬挂元字符'*'   *酒吧   ^

我不知道为什么会发生这种情况,因为我将Pattern p = Pattern.compile("* bar"); Matcher m = p.matcher("foo bar"); System.out.println(m.find()); 替换为Pattern p = Pattern.compile("* bar") 一切都按预期工作,控制台输出为真。

2 个答案:

答案 0 :(得分:2)

正则表达式中的

*有<{3}} 重复零次或多次(又名空字符串x,{{ 1}}等等都将由xx匹配。例如)。

当它在开始时,正则表达式引擎不知道要重复什么,因此错误。在第二个示例中,您说的是 x*,后跟零个或多个空格

如果你想匹配文字foo,你必须逃避它 - *

答案 1 :(得分:1)

正则表达式中的

*表示前一个符号重复零次或多次。由于您未指定任何前面的符号,因此会出现错误。您可以使用.表示任何字符。因此,对于您的用例,您可以将正则表达式编写为.* bar