/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
import java.util.regex.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void getAllMatches
( Pattern p,
String in, List
< String
> out
) {
Matcher m = p.matcher ( in) ;
while ( m.find ( ) )
{
out.add ( m.group ( 2 ) ) ;
getAllMatches( p, m.group ( 2 ) , out) ;
}
}
{
Pattern p = Pattern.compile ( "\\ [([^\\ ]]+)\\ ](.+?)\\ [/\\ 1\\ ]" ) ;
List< String> out = new ArrayList< String> ( ) ;
String s
= "[A]outer[B][C]last one left[/C]middle[/B][/A] [A]out[B]in[/B][/A]" ; getAllMatches( p, s, out) ;
// output stuff
System .
out .
println ( "IN: " + s
+ "\n -----------" ) ; s = "[quote]http://w...content-available-to-author-only...e.com?watch?v=asasdsadsa [url]aisa[/url] [/quote]" ;
System .
out .
println ( "-----------\n IN: " + s
+ "\n -----------" ) ; out.clear ( ) ; getAllMatches( p, s, out) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIGdldEFsbE1hdGNoZXMoUGF0dGVybiBwLCBTdHJpbmcgaW4sIExpc3Q8U3RyaW5nPiBvdXQpCgl7CgkgICAgTWF0Y2hlciBtID0gcC5tYXRjaGVyKGluKTsKCSAgICB3aGlsZSAobS5maW5kKCkpIAoJCXsKCQkgICAgb3V0LmFkZChtLmdyb3VwKDIpKTsKCQkgICAgZ2V0QWxsTWF0Y2hlcyhwLCBtLmdyb3VwKDIpLCBvdXQpOwoJCX0KCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkgICAgUGF0dGVybiBwID0gUGF0dGVybi5jb21waWxlKCJcXFsoW15cXF1dKylcXF0oLis/KVxcWy9cXDFcXF0iKTsKCQlMaXN0PFN0cmluZz4gb3V0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CgkJU3RyaW5nIHMgPSAiW0Fdb3V0ZXJbQl1bQ11sYXN0IG9uZSBsZWZ0Wy9DXW1pZGRsZVsvQl1bL0FdIFtBXW91dFtCXWluWy9CXVsvQV0iOwoJCWdldEFsbE1hdGNoZXMocCwgcywgb3V0KTsKCQkKCQkvLyBvdXRwdXQgc3R1ZmYKCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOOiAiK3MrIlxuLS0tLS0tLS0tLS0iKTsKCQlmb3IgKFN0cmluZyBvIDogb3V0KSB7IFN5c3RlbS5vdXQucHJpbnRsbihvKTsgfQoJCXMgPSAiW3F1b3RlXWh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbT93YXRjaD92PWFzYXNkc2Fkc2EgW3VybF1haXNhWy91cmxdIFsvcXVvdGVdIjsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tXG5JTjogIitzKyJcbi0tLS0tLS0tLS0tIik7CgkJb3V0LmNsZWFyKCk7IGdldEFsbE1hdGNoZXMocCwgcywgb3V0KTsKCQlmb3IgKFN0cmluZyBvIDogb3V0KSB7IFN5c3RlbS5vdXQucHJpbnRsbihvKTsgfQoJfQp9