I try to get the GOSTs from the $result_text variable when I store a short string in the variable that includes some GOST, preg_match_all finds. And I get an array of one element. But when I write a bigger line, as in the code below, I don’t find any entries at all. Tell me what's wrong here?

 $result_text = "ГОСТ 2.301-68 ЕСКД. Форматы;о наследия (памятниках истории и культуры) народов ГОСТ 34.201-89. Информационная технология. Комплекс стандартов на автоматизированные системы. Виды, комплектность и обозначение документов при создании автоматизированных систем; ГОСТ 34.003-90 Информационная технология. Комплекс стандартов на автоматизированные системы. Термины и определения; ГОСТ 34.601-90 Информационная технология. Комплекс стандартов на автоматизированные системы. Автоматизированные системы. Стадии создания; ГОСТ 34.603-92 Информационная технология. Виды испытаний автоматизированных систем;РД 50-34.698-90. Методические указания. Информационная технология. Комплекс стандартов на автоматизированные системы. Автоматизированные системы. Требования к содержанию документов; "; $result_text = explode("ГОСТ", $result_text); for ($i=0;$i<count($result_text);$i++){ $aaa = 'ГОСТ'.$result_text[$i]; echo $aaa.'<hr><br>'; if (preg_match_all("/ГОСТ.d{1,10}.d{1,10}.d{1,10}/i",$aaa,$matches)) { var_dump($matches); echo '<hr>'; } else echo "NO<hr>"; } 
  • 2
    The numbers are \d , not d . Try if (preg_match_all('~ГОСТ\s*\d+\.\d+-\d+~iu', $result_text, $res)) { print_r($res[0]); } if (preg_match_all('~ГОСТ\s*\d+\.\d+-\d+~iu', $result_text, $res)) { print_r($res[0]); } . See the demo . - Wiktor Stribiżew pm
  • Respected! Thank you very much! - Vladlen Vozhzhaev

1 answer 1

Use preg_match_all directly with the following regular expression:

  '~ГОСТ\s*\d+\.\d+-\d+~iu' 

See an example of a regular expression .

Details

  • ГОСТ - ГОСТ string
  • \s* - 0 or more whitespace characters
  • \d+ - 1 or more digits
  • \. - point symbol
  • \d+ - 1 or more digits
  • - - hyphen
  • \d+ - 1 or more digits.

PHP:

 if (preg_match_all('~ГОСТ\s*\d+\.\d+-\d+~iu', $result_text, $res)) { print_r($res[0]); } // => Array ( [0] => ГОСТ 2.301-68 [1] => ГОСТ 34.201-89 [2] => ГОСТ 34.003-90 [3] => ГОСТ 34.601-90 [4] => ГОСТ 34.603-92 )