Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何提取字符的第二次出现?_Java_Regex_Substring - Fatal编程技术网

Java 如何提取字符的第二次出现?

Java 如何提取字符的第二次出现?,java,regex,substring,Java,Regex,Substring,如何从中提取“1358751074-6824” http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg http://api.discogs.com/images/R-1169056-13587510746824.jpeg 它还需要从中提取“13587510746824” http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg http://api.disco

如何从中提取“1358751074-6824”

http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg
http://api.discogs.com/images/R-1169056-13587510746824.jpeg
它还需要从中提取“13587510746824”

http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg
http://api.discogs.com/images/R-1169056-13587510746824.jpeg

所以我想我可以通过从“最后一个路径组件的第二个-到最后一个点”的子串来实现,但是如何计算第二个-

根据允许的字符串变化,可以执行以下操作:

String extract = s.replaceAll(".*?-.*?-([\\d-]+).*", "$1");
  • *?-
    跳过第一个连字符之前的所有内容
  • *?-
    跳过所有内容直到第二个连字符
  • ([\\d-]+)
    是您要保留的部分:数字和连字符
  • *
    跳过字符串的其余部分

您可以在不使用正则表达式的情况下计算出第二个破折号的位置-通过找到第一个破折号的位置,然后从那里开始计算:

int pos = str.indexOf('-', str.indexOf('-')+1);

您可以尝试以下方法:

// Your original String
String str = "http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg";

// identify the one-before-last-dash
int i=str.lastIndexOf("-", str.lastIndexOf("-")-1);

// Extract the value you want
String newStr = str.substring(i+1, str.lastIndexOf("."));

// Return numeric value only
String strNums = newStr.replaceAll("[^?0-9]+", "");

谢谢,这是最简单的方法。谢谢你的回答,这次我选择了nonregexp选项,因为它更容易理解