因此,我有以下Java代码段:
Pattern p = Pattern.compile("* bar");
Matcher m = p.matcher("foo bar");
System.out.println(m.find());
但是,当我运行它时,出现以下错误:
线程“主”中的异常java.util.regex.PatternSyntaxException:在索引0附近悬挂元字符'*'
*酒吧
^
不确定为什么会发生这种情况,就像我将
Pattern p = Pattern.compile("* bar")
替换为Pattern p = Pattern.compile("foo *")
时一样一切都按预期工作,并且控制台输出为true。
最佳答案
正则表达式中的*
具有special meaning重复零次或多次(例如,空字符串,x
,xx
等都将由x*
匹配)。
刚开始时,正则表达式引擎不知道要重复什么,因此会出错。在第二个示例中,您说的是foo
,后接零个或多个空格。
如果要匹配文字*
,则必须对其进行转义-\\*
。
关于java - 正则表达式的第一个字符为*时的Java PatternSyntaxException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32291713/