我需要从给定的输入中检索正则表达式模式匹配的字符串。
让我们说,我需要得到的模式就像,
"http://mysite.com/<somerandomvalues>/images/<againsomerandomvalues>.jpg"
现在我为此创建了以下正则表达式模式
http:\/\/.*\.mysite\.com\/.*\/images\/.*\.jpg
任何人都可以说明如何使用Java?
使用此regx表达式检索所有匹配的模式答案 0 :(得分:2)
一些简单的Java示例:
String my_regex = "http://.*.mysite.com/.*/images/.*.jpg";
Pattern pattern = Pattern.compile(my_regex);
Matcher matcher = pattern.matcher(string_to_be_matched);
// Check all occurance
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
答案 1 :(得分:2)
您不会屏蔽斜线而是字面点:
String regex = "http://(.*)\\.mysite\\.com/(.*)/images/(.*)\\.jpg";
String url = "http://www.mysite.com/work/images/cat.jpg";
Pattern pattern = Pattern.compile (regex);
Matcher matcher = pattern.matcher (url);
if (matcher.matches ())
{
int n = matcher.groupCount ();
for (int i = 0; i <= n; ++i)
System.out.println (matcher.group (i));
}
结果:
www
work
cat
答案 2 :(得分:1)
事实上,目前尚不清楚您是想要整个匹配字符串还是只需要组。
Bogdan Emil Mariesan's answer可以缩减为
if ( matcher.matches () ) System.out.println(string_to_be_matched);
因为你知道它已经成熟并且没有任何组。
恕我直言,如果您想获得匹配的群组,user unknown's answer是正确的。
我只想添加其他信息(对于其他人),如果您需要匹配的群组,也可以使用replaceFirst()
方法:
String firstGroup = string.replaceFirst( "http://mysite.com/(.*)/images/", "$1" );
但是 Pattern.compile方法的性能如果有更好的话,如果有两个或更多组,或者你需要多次这样做(另一方面,在编程竞赛中,它会更快写replaceFirst()
)。