gpt4 book ai didi

java - 正则表达式 "reluctant"量词行为不当

转载 作者:行者123 更新时间:2023-12-01 18:32:03 25 4
gpt4 key购买 nike

我有这个 Java 代码,它是 LaTex 歌曲集项目的一部分。

Pattern p = Pattern.compile("\\\\retitle\\{(.*?)\\}",Pattern.DOTALL);
Matcher m = p.matcher(in);
System.out.println(m.matches());
System.out.println(m.group(1));

鉴于此输入:

\retitle{Livin' on a prayer}{Bon Jovi}
\begin{song}\begin{vers}[Em]Johnie used to work on the docks\newline
Saving up his money I don't know these l[C]yrics\newline
l[D]ol.\newline
\end{vers}
\end{song}

我期待这个输出:

true
Livin' on a prayer

但我实际上明白了:

true
Livin' on a prayer}{Bon Jovi}
\begin{song}\begin{vers}[Em]Johnie used to work on the docks\newline
Saving up his money I don't know these l[C]yrics\newline
l[D]ol.\newline
\end{vers}
\end{song

换句话说,*?量词并不像我想象的那么“不情愿”。我做错了什么?

最佳答案

问题不在于您的正则表达式,而在于您使用的方法:Matcher.matches() 尝试将模式与整个输入进行匹配。量词的不情愿并没有真正获得相关的机会,因为您的输入字符串只能以一种方式匹配模式。

相反,您需要使用 Matcher.find(),它会尝试查找输入中与模式匹配的子字符串。

参见the Javadoc for Matcher了解更多信息。

关于java - 正则表达式 "reluctant"量词行为不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com