C++0xの文字列にだいたいマッチする正規表現を書くなどしてみた
がんばった。
\u, \U, \o, \xのあたりはあまり気にしない。あと文字コードも知らない。
$esc = '\\\\.'; $cChar = "(?:[^'\\\\\\n]|$esc)"; $cPrefix = '[uUL]'; $ch = "(?:$cPrefix?'$cChar+')"; $sChar = qq{(?:[^"\\\\\\n]|$esc)}; $strPre = '(?:[uUL]|u8)'; $simpleString = qq{(?:$strPre"$sChar*"|(?<!R)"$sChar*")}; $rChar = qq{(?:[^\\\\\\]]|\\\\(?![uU])|\\](?!\\k'dCharSeq'"))}; $dChar = q{[[:alnum:]!"\#$%&'()-^\\\\=~|{};:+*,./<>?_]}; $rawString = qq{$strPre?R"(?'dCharSeq'$dChar*)\\[$rChar*\\]\\k'dCharSeq'"}; $str = "(?:$simpleString|$rawString)"; while (<>) { if (/$str/) { print $&; } }