我知道它已经被问到Here但是我想像在Pshemo建议的那样在java中使用命名组,我无法弄清楚我的正则表达式转换有什么问题:
这是python regexp:
regexp = re.compile(r'(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)', re.DOTALL | re.MULTILINE)
matches = regexp.findall(content)
这是我的java转换的regexp:
String regexp = "(?<delim>[^\\w\\n\\\"'])(?<space> ?)(?<quote>[\\\"']).*?(?=quote)(?=delim)";
Pattern pattern = Pattern.compile(regexp, Pattern.DOTALL | Pattern.MULTILINE);
Matcher matcher = pattern.matcher(content);
我做错了什么?
答案 0 :(得分:1)
您将命名后向引用转换为正向前瞻((?P=quote)
=&gt; (?=quote)
),而您需要\k<groupname>
:
String regex = "(?<delim>[^\\w\n\"'])(?<space> ?)(?<quote>[\"']).*?\\k<quote>\\k<delim>";