use strict;
my $str = '
//get means only read, but not to mutate data
Get(BooksWithAuthors)
//default queries via mycel
.Query()
//junction table to pair books and authors
.From("BookAuthor".As(BA))
//main table for books
.Join(left: Books.As(B) => B.Id == BA.BookId)
//or select only that fields or objects you want to response
.Select(B)
.Foo("//wrong-comment-inside-quotes")
.Foo(\'//wrong-comment-inside-single-quotes\')
.Foo(some /*wrong-comment*/ inside)
.Foo(\'some /*wrong-comment*/ inside\')
;
//get means only read, but not to mutate data
Get(BooksWithAuthorsByMethod)
//using individual backside methods (created by own)
.GetBooksWithAuthors(id:6, filter:{key:\'minAuthorAge\', value:17})
;
/*
comments
"over"
*/
/*
\'multiply
lines\' //with wrong comments inside
*\\
aa"aasdfasdasdf
asdfasdfasdf
asdfasdf"asdfasd
';
my $regex = qr/'.*?'|".*?"|(\/\/[^\r\n]*|\/\*.*?\*\/)/sp;
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