@@ -206,6 +206,7 @@ public static function dump($value, $flags = 0)
206206case Escaper::requiresDoubleQuoting ($ value ):
207207return Escaper::escapeWithDoubleQuotes ($ value );
208208case Escaper::requiresSingleQuoting ($ value ):
209+ case preg_match ('{^[0-9]+[_0-9]*$} ' ,$ value ):
209210case preg_match (self ::getHexRegex (),$ value ):
210211case preg_match (self ::getTimestampRegex (),$ value ):
211212return Escaper::escapeWithSingleQuotes ($ value );
@@ -564,6 +565,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
564565return ;
565566case 0 ===strpos ($ scalar ,'!!float ' ):
566567return (float )substr ($ scalar ,8 );
568+ case preg_match ('{^[+-]?[0-9][0-9_]*$} ' ,$ scalar ):
569+ $ scalar =str_replace ('_ ' ,'' , (string )$ scalar );
567570case ctype_digit ($ scalar ):
568571$ raw =$ scalar ;
569572$ cast = (int )$ scalar ;
@@ -576,6 +579,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
576579return '0 ' ==$ scalar [1 ] ?octdec ($ scalar ) : (((string )$ raw === (string )$ cast ) ?$ cast :$ raw );
577580case is_numeric ($ scalar ):
578581case preg_match (self ::getHexRegex (),$ scalar ):
582+ $ scalar =str_replace ('_ ' ,'' ,$ scalar );
583+
579584return '0x ' ===$ scalar [0 ].$ scalar [1 ] ?hexdec ($ scalar ) : (float )$ scalar ;
580585case '.inf ' ===$ scalarLower :
581586case '.nan ' ===$ scalarLower :
@@ -584,8 +589,8 @@ private static function evaluateScalar($scalar, $flags, $references = array())
584589return log (0 );
585590case 0 ===strpos ($ scalar ,'!!binary ' ):
586591return self ::evaluateBinaryScalar (substr ($ scalar ,9 ));
587- case preg_match ('/^(-|\+)?[0-9,]+ (\.[0-9 ]+)?$/ ' ,$ scalar ):
588- return (float )str_replace (', ' ,'' ,$ scalar );
592+ case preg_match ('/^(-|\+)?[0-9][0-9,_]* (\.[0-9_ ]+)?$/ ' ,$ scalar ):
593+ return (float )str_replace (array ( ', ' , ' _ ' ) ,'' ,$ scalar );
589594case preg_match (self ::getTimestampRegex (),$ scalar ):
590595if (Yaml::PARSE_DATETIME &$ flags ) {
591596return new \DateTime ($ scalar ,new \DateTimeZone ('UTC ' ));
@@ -662,6 +667,6 @@ private static function getTimestampRegex()
662667 */
663668private static function getHexRegex ()
664669 {
665- return '~^0x[0-9a-f ]++$~i ' ;
670+ return '~^0x[0-9a-f_ ]++$~i ' ;
666671 }
667672}