Java 需要一个正则表达式来提取两个“之间的字符串”;划界;串

Java 需要一个正则表达式来提取两个“之间的字符串”;划界;串,java,regex,Java,Regex,我需要从上获取和上的之间的字符串 到目前为止,我有这个,但不知道如何截断实际的“字符串分隔符”: by_uu(.*)\u on 示例输入: 1月26日wesasegeaazedude提供的文件。jpg 当前匹配: 作者:wesasegeaazedude 所需匹配项: wesasegeaazedude您可以简单地使用积极的环视: String regex=“(?您的表达式很好*。您只需提取第一个捕获组的内容: Pattern regex = Pattern.compile("by_(.*)_on"

我需要从上获取上的
之间的字符串 到目前为止,我有这个,但不知道如何截断实际的“字符串分隔符”:
by_uu(.*)\u on

示例输入:
1月26日wesasegeaazedude提供的文件。jpg
当前匹配:
作者:wesasegeaazedude 所需匹配项:
wesasegeaazedude

您可以简单地使用积极的环视:

String regex=“(?您的表达式很好*。您只需提取第一个捕获组的内容:

Pattern regex = Pattern.compile("by_(.*)_on");
String str = "Files_by_wesasegeaazedude_on_January_26.jpg";
Matcher m = regex.matcher(str);
if (m.find()) {
    String res = m.group(1);
}


>好的,几乎是好的。如果你希望在同一行上输入多个文件名,你可能想考虑使用不情愿的限定符,即<代码> By*(* *)在

> P>我会这样做,没有正则表达式。

int start = str.indexOf("by_");
int end = str.indexOf("_on", start + 1); // or lastIndexOf("_on"), for greedy match.
assert start > 0 && end > start;
String part = str.substring(start + 3, end);

Java,但我正在RegExr.com上测试它,通常它是第一个索引(不是0)这包含了第一个捕获的组。你为什么建议一个低效的模式?OP得到了同样的模式,效率更高。@WiktorStribiżew,因为他说他不想通过
和匹配
int start = str.indexOf("by_");
int end = str.indexOf("_on", start + 1); // or lastIndexOf("_on"), for greedy match.
assert start > 0 && end > start;
String part = str.substring(start + 3, end);