3v4l.org

run code in 300+ PHP versions simultaneously
<?php function parse(string $input): array { static $pattern = <<<'EOD' / # 先頭 ^ # name 部分 (?<name> # \p{L}\p{N} を最低1個は含む (?=[^「」\p{C}\p{L}\p{N}]*+[\p{L}\p{N}]) # カッコと制御文字以外の繰り返し [^「」\p{C}]++ )? # カッコ+空白だけのコメントの場合は読み飛ばす条件分岐 (?: # empty_comment 部分 (?<empty_comment> 「 # カッコの中身 (?: # empty_comment の再帰 (?&empty_comment) )*+ 」 ) # empty_comment がマッチしたらそこまでをすべて読み飛ばす (*SKIP)(*FAIL) | # comment 部分 (?<comment> 「 # カッコの中身 (?: # \p{L}\p{N} を最低1個は含む (?=[^「」\p{C}\p{L}\p{N}]*+[\p{L}\p{N}]) # カッコと制御文字以外の繰り返し [^「」\p{C}]*+ # または | # comment の再帰 (?&comment) )*+ 」 )? ) # 末尾 $ /ux EOD; preg_match($pattern, $input, $match); $name = $match['name'] ?? ''; $comment = $match['comment'] ?? ''; // 外側のカッコを切り取り $comment = mb_substr($comment, 1, -1, 'UTF-8'); $name = $name === '' ? null : $name; $comment = $comment === '' ? null : $comment; return compact('name', 'comment'); } $inputs = [ /* * 正しい値が与えられた場合、一方か両方に値が入る *----------------------------------------------*/ '一郎「こんにちは」', // ["name"=>"一郎","comment"=>"こんにちは"] '二郎「男の中の「男」です」', // ["name"=>"二郎","comment"=>"男の中の「男」です"] '三郎', // ["name"=>"三郎","comment"=>"null"] '「こんばんは」', // ["name"=>"null","comment"=>"こんばんは"] /* * 不正な値が与えられた場合、いずれも null を返す *----------------------------------------------*/ //(1)以下のように「」の後に文字がある場合 null とする '「こんばんは」です', // ["name"=>"null","comment"=>"null"] //(2)以下のように「」がセットじゃない場合 null とする '五郎「男の中の「男」かも', // ["name"=>"null","comment"=>"null"] '「男の中の「男」かも', // 同上 '「やばい', // 同上 'ねむい」', // 同上 '「', // 同上 '」', // 同上 '「「」', // 同上 //(3)以下のように記号だけの場合 null とする '「」', // ["name"=>"null","comment"=>"null"] '「「」」', // 同上 '「★」', // 同上 '「!!」', // 同上 ]; foreach ($inputs as $input) { var_dump([$input => parse($input)]); }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.4.20.0040.00719.15
8.4.10.0090.00019.74
8.3.150.0060.01317.41
8.3.140.0080.01117.18
8.3.130.0060.00317.27
8.3.120.0090.00020.91
8.3.110.0090.00018.81
8.3.100.0160.00416.91
8.3.90.0130.00718.52
8.3.80.0090.00020.61
8.3.70.0120.00817.00
8.3.60.0130.00717.25
8.3.50.0150.00320.49
8.3.40.0070.00723.67
8.3.30.0100.00718.95
8.3.20.0030.00624.18
8.3.10.0080.00024.66
8.3.00.0080.00026.16
8.2.270.0070.01017.32
8.2.260.0090.00916.61
8.2.250.0130.00618.86
8.2.240.0080.01217.32
8.2.230.0120.00920.94
8.2.220.0100.01324.06
8.2.210.0080.01126.77
8.2.200.0090.00016.84
8.2.190.0090.00616.75
8.2.180.0100.01025.92
8.2.170.0120.00919.15
8.2.160.0040.01122.96
8.2.150.0000.00825.66
8.2.140.0080.00024.66
8.2.130.0030.00626.16
8.2.120.0000.00821.18
8.2.110.0090.00320.66
8.2.100.0040.00720.47
8.1.310.0110.00716.58
8.1.300.0070.01318.52
8.1.290.0030.00618.88
8.1.280.0160.00325.92
8.1.270.0050.00323.99
8.1.260.0060.00326.35
8.1.250.0040.00428.09
8.1.240.0030.00619.15
8.1.230.0100.00319.32
8.1.00.0080.00317.72

preferences:
60.36 ms | 403 KiB | 5 Q