import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
public class Main
{
static void printMatch
( String regex,
String str,
int ...
groups ) {
System .
out .
println ( "String = " + str
) ; System .
out .
println ( "Regex = " + regex
) ; Pattern p = Pattern.compile ( regex) ;
Matcher m = p.matcher ( str) ;
while ( m.find ( ) )
for ( int i: groups)
System .
out .
println ( "Group " + i
+ " = " + m.
group ( i
) ) ; }
{
System .
out .
println ( "The old way:" ) ; String regex
= "echo[\\ t ]+\" .*?(?<!\\ \\ )\" " ; printMatch( regex, str, 0 ) ;
System .
out .
println ( "The new way:" ) ; regex = "echo[\\ t ]+\" (\\ \\ .|[^\\ \\ ])*?\" " ;
str = "echo \" \\ \\ \" " ;
printMatch( regex, str, 0 ) ;
str = "some other stuff echo \" This will not \\ \" work\" some other stuff" ;
printMatch( regex, str, 0 ) ;
}
}
aW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwppbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CgpwdWJsaWMgY2xhc3MgTWFpbgp7CiAgIHN0YXRpYyB2b2lkIHByaW50TWF0Y2goU3RyaW5nIHJlZ2V4LCBTdHJpbmcgc3RyLCBpbnQuLi4gZ3JvdXBzKQogICB7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RyaW5nID0gIiArIHN0cik7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnZXggPSAiICsgcmVnZXgpOwogICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwogICAgICBNYXRjaGVyIG0gPSBwLm1hdGNoZXIoc3RyKTsKICAgICAgd2hpbGUgKG0uZmluZCgpKQogICAgICAgICBmb3IgKGludCBpOiBncm91cHMpCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR3JvdXAgIiArIGkgKyAiID0gIiArIG0uZ3JvdXAoaSkpOwogICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgfQoKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgogICB7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIG9sZCB3YXk6Iik7CiAgICAgIFN0cmluZyByZWdleCA9ICJlY2hvW1xcdCBdK1wiLio/KD88IVxcXFwpXCIiOwogICAgICBTdHJpbmcgc3RyID0gImVjaG8gXCJcXFxcXCIiOwogICAgICBwcmludE1hdGNoKHJlZ2V4LCBzdHIsIDApOwogICAgICAgCiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIG5ldyB3YXk6Iik7CiAgICAgIHJlZ2V4ID0gImVjaG9bXFx0IF0rXCIoXFxcXC58W15cXFxcXSkqP1wiIjsKICAgICAgc3RyID0gImVjaG8gXCJcXFxcXCIiOwogICAgICBwcmludE1hdGNoKHJlZ2V4LCBzdHIsIDApOwogICAgICBzdHIgPSAic29tZSBvdGhlciBzdHVmZiBlY2hvIFwiVGhpcyB3aWxsIG5vdCBcXFwiIHdvcmtcIiBzb21lIG90aGVyIHN0dWZmIjsKICAgICAgcHJpbnRNYXRjaChyZWdleCwgc3RyLCAwKTsKICAgfQp9