php запрещает sscanf() принимать «-» в качестве строки

#php

Вопрос:

Он может различать десятичные и» -»

 $str = "1995-25";
$pat = sscanf( $str , "%d-%d);
print_r($pat);
 

Он также может различать первую » — » и следующую строку

 $str = "-of";
$pattern = sscanf ( $str , "-%s" );
print_r ( $pattern );
 

но когда дело доходит до обозначения » — «в середине строки
, оно предполагает» — » как строку
, и, что более удивительно, первый %s считывает его до последнего
, даже рассматривая 4 как строку

 $str = '-of-america-4';
$pat = sscanf ($str , "-%s-%s-%d");
print_r($pat);
// outputs [0] => of-america-4
 

Комментарии:

1. - это струна. Добавьте некоторые ожидаемые результаты

Ответ №1:

%s это жадное совпадение, вы могли бы использовать %[^-]

 <?php
$str = '-of-america-4';
$pat = sscanf($str , '-%[^-]-%[^-]-%d');
print_r($pat);
 
 Array
(
    [0] => of
    [1] => america
    [2] => 4
)
 

Комментарии:

1. спасибо, что сработало, но не могли бы вы подробнее рассказать о %[^-] ? Я никогда раньше не видел этого в программировании

2. это не документировано PHP, если вы используете систему unix(macOS, linux), вы можете прочитать более подробную информацию по man sscanf

3. linux.die.net/man/3/sscanf