fork download
  1.  
  2. use 5.12.1;
  3. use encoding 'utf-8';
  4. $| = 1;
  5.  
  6. my @test_boundary = ( # EXPECTED RESULT:
  7. '"abc def"', # '«abc def»'
  8. '"abc "d e f" ghi"', # '«abc «d e f» ghi»'
  9. '"abc "d e f""', # '«abc «d e f»»'
  10. '"abc "d e f"', # '«abc "d e f»'
  11. '"abc "d" "e" f"', # '«abc «d» «e» f»'
  12. # below won't work with \b when locale enabled
  13. '"100 Естонiï"', # '«100 Естонiï»'
  14. '"äöõ "ä õ ü" ï"', # '«äöõ «ä õ ü» ï»'
  15. '"äöõ "ä õ ü""', # '«äöõ «ä õ ü»»'
  16. '"äöõ "ä õ ü"', # '«äöõ «ä õ ü»'
  17. '"äöõ "ä" "õ" ï"', # '«äöõ «ä» «õ» ï»'
  18. );
  19.  
  20. my @test_emulate = ( # EXPECTED RESULT:
  21. '"100 Естонiï"', # '«100 Естонiï»'
  22. '"äöõ "ä õ ü" ï"', # '«äöõ «ä õ ü» ï»'
  23. '"äöõ "ä õ ü""', # '«äöõ «ä õ ü»»'
  24. '"äöõ "ä õ ü"', # '«äöõ "ä õ ü»'
  25. '"äöõ "ä" "õ" ï"', # '«äöõ «ä» «õ» ï»'
  26. );
  27.  
  28. say "BOUNDARY";
  29. for my $sentence ( @test_boundary ) {
  30. my $quote_count = ( $sentence =~ tr/"/"/ );
  31.  
  32. for ( my $i = 0 ; $i <= $quote_count ; $i += 2 ) {
  33. $sentence =~ s/
  34. "( # first qoute, start capture
  35. [\w\.]+? # suva word-char
  36. .*?\b[\.,?!»]*? # any char followed boundary + opt. punctuation
  37. )" # stop capture, ending quote
  38. /«$1»/xg; # change to fancy
  39. }
  40. say $sentence;
  41. }
  42.  
  43. say "EMULATE";
  44. for my $sentence ( @test_boundary ) {
  45. my $quote_count = ( $sentence =~ tr/"/"/ );
  46.  
  47. for ( my $i = 0 ; $i <= $quote_count ; $i += 2 ) {
  48. $sentence =~ s/
  49. "( # first qoute, start capture
  50. [\p{Word}\.]+? # at least one word-char or point
  51. .*?(?<=\p{Word}) # any char followed boundary
  52. [\.,?!»]*? # optional punctuation
  53. )" # stop capture, ending quote
  54. /«$1»/gx; # change to fancy
  55. }
  56. say $sentence;
  57. }
Success #stdin #stdout 0.03s 6112KB
stdin
Standard input is empty
stdout
BOUNDARY
«abc def»
«abc «d e f» ghi»
«abc «d e f»»
«abc "d e f»
«abc «d» «e» f»
«100 Естонiï»
«äöõ «ä õ ü» ï»
«äöõ «ä õ ü»»
«äöõ "ä õ ü»
«äöõ «ä» «õ» ï»
EMULATE
«abc def»
«abc «d e f» ghi»
«abc «d e f»»
«abc "d e f»
«abc «d» «e» f»
«100 Естонiï»
«äöõ «ä õ ü» ï»
«äöõ «ä õ ü»»
«äöõ "ä õ ü»
«äöõ «ä» «õ» ï»