use strict;
my $str = '
1. Valid double-quoted strings:
- "Hello"
- "This is a test"
- "123"
- "Special characters: @#$%^&*()_+"
- "Escape sequence: \\n"
2. Valid double-quoted strings with additional characters or variables:
- " test aaaaa \\" " + asdf
- " test " + ( "aaaaa" ) + gdf
- " test \\" " + `" aaaa " + dfg
- " test \' aaaaa \\" " + dfg
- ""
3. Valid double-quoted strings with special characters:
- "sas\'\'as\\"a1\\\'2 ! -_?:sa"
- "\'\'"
- "\\abnb\\ajhgf\\crt098& \\"\'"
4. Invalid double-quoted strings:
- " test " + ( "aaaaa" ) \\" saf
- "\\\\ + \\* test " \\$ \\. dsdfs
- (\\" test \\" " + " aaaa " sfgd
- \' test \' + aas ( "aaaaa" ) + \'\\ sd
- \'\\\\ + \\* test \' \\$ \\. trace
- (\' test \' as \' + \' aaaa \'
- \'""\'
- \'"sas\'
- \'ads\'
- \'asdasd\\"asdsa\'
- "klkl"klkl
- "asa\\\'sasa\\\\"
- \\\'\\\\\\\'
- "hhhh"klkl"
- \'jkjkjk\'klklk\'
- \'\\"\\\\\\"\'
- \'\'
- \'\\"asa\\\'sasa\\\\\\"\'
- "sasasasa\\\\\\\\\\\\"
1. Valid single-quoted strings:
- \'Hello\'
- \'This is a test\'
- \'123\'
- \'Special characters: @#$%^&*()_+\'
- \'Escape sequence: \\n\'
2. Valid single-quoted strings with additional characters or variables:
- \' test aaaaa \\\' \' + asdf
- \' test \' + ( \'aaaaa\' ) + gdf
- \' test \\\' \' + \' aaaa\' + dfg
- \' test " aaaaa \\\' \' + dfg
- \'\'
3. Valid single-quoted strings with special characters:
- \'sas""as\\\'a1\\"2 ! -_?:sa\'
- \'""\'
- \'\\abnb\\ajhgf\\crt098& \\\'""\'
4. Invalid single-quoted strings:
- \' test \' + ( \'aaaaa\' ) \\\' saf
- \'\\\\ + \\* test \' \\$ \\. dsdfs
- (\\\' test \\\' + \' aaaa \' sfgd
- " test \\" " + " aaaa " sfgd
- \' test \' + aas ( \'aaaaa\' ) + \'\\ sd
- \'\\\\ + \\* test \' \\$ \\. trace
- (\' test \' as \' + \' aaaa \'
- "\'\'"
- \'sas"
- "ads\'
- \'asdasd\\\'asdsa\'
- "klkl"klkl
- "asa\\\'sasa\\\\"
- \\\'\\\\\\\'
- \'hhhh"klkl\\\'\\
- \\\'jkjkjk"klklk\'
- "\\\'\\\\\\\'"
- \'\'
- \'\\"asa\\\'sasa\\\\\\"\'
- \'sasasasa\\\\\\\\\\\\\'
';
my $regex = qr/(?:\"(?:(?<=\"(?=[^\n]))[^\n]+?(?=(?<!\\))(?=\"))?\")|(\B'(?:(?<='(?=[^\n]))[^\n]+?(?=(?<!\\))(?='))?')/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html