(((\?+|(\?\/|\/)(\?\/)*\?*)|([^\'\"\/\s\?]|((\?|\/)\?+[^\s\?\"])|((\?\/|\/)(\?\/)*([^\'\"\/\s\?\*]|\?(\?+[^\?\"\s]|[^\'\"\/\s\?]))))([^\'\"\/\s\?]|\?\?+[^\?\"\s]|(\/|\?\/)(\?\/)*([^\'\"\/\s\?\*]|\?(\?+[^\?\"\s]|[^\'\"\/\s\?])))*((\?+|(\/|\?\/)(\?\/)*\?*)?))|((\'([^\'?\\]|\\.|\?(\?+(\/.|[^?\/])))*(\'|\?\'))|(\"([^\"\\?]|\\.|\?\?+(\/.|[^\?\"\/]))*(\"|\?+\")))) #### while( $line = <> ) { if( $line =~ m/^$token$/ ) { print "match\n"; } else { print "mismatch\n"; } } #### x match /*x*/ mismatch "x" match "\" mismatch "\"" match "/*x*/" match "x"/*x*/ mismatch /*x*/x mismatch x/*x*/ mismatch //x mismatch x="2"; mismatch #### (blank) mismatch x match x="2"; match /*x*/ match //x match