dog,cat dog,dog,dog
dog,cat dog,dog,dog
如果您将猫锚定在字符串的末尾,即使用^(狗). ?(猫)?$,你会得到一个匹配,虽然:
Pattern p = Pattern.compile("^(dog).+?(cat)?$"); for (String s : new String[] {"dog,cat","dog,dog"}) { Matcher m = p.matcher(s); if (m.find()) { System.out.println(m.group(1)+" "+m.group(2)); } }
打印(demo 1)
dog cat dog cat dog null
Do you happen to know how to deal with it in case there’s something after cat?
您可以通过构建一个比猫以外的任何东西更复杂的表达来处理它,如下所示:
^(dog)(?:[^c]|c[^a]|ca[^t])+(cat)?
现在猫可以发生在字符串的任何地方,没有锚点(demo 2).