您的猜测是正确的 - 这不起作用,因为您已经在 string 中指定了lookbehind 和lookahead 结构myregex
。解决这个问题的一种方法是为你想要的后向和前瞻结构保存单独的字符串,并在你需要进行匹配之前使用它们来构建最终的正则表达式字符串。例如,您可以编写如下方法,该方法将返回一个正则表达式字符串,给定lookbehind和lookahead结构以及它们之间的匹配内容:
public static String lookaroundRegex(String behind, String match, String ahead) {
return "((?<=" + behind + ")" + match + "(?=" + ahead + "))";
}
然后,您可以按如下方式使用它:
String behind = "xxx";
String ahead = "[y]+";
String match = "cab";
// For the first case:
Pattern regexPattern1 = Pattern.compile(lookaroundRegex(behind, match, ahead));
// For the second case:
String behind2 = "\\(test string\\) " + behind;
Pattern regexPattern2 = Pattern.compile(lookaroundRegex(behind2, match, ahead));