Регулярные выражения php preg_match

156
26 января 2020, 07:40

Пытаюсь достать из переменной $result_text ГОСТы, когда в переменной храню короткую строку в которую включён какой нибудь ГОСТ, preg_match_all находит. И я получаю массив из одного элемента. Но когда я пишу строку побольше, как в коде ниже, то вхождений вообще не нахожу. Подскажите, что здесь не так?

$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>";
}
Answer 1

Используйте preg_match_all напрямую со следующим регулярным выражением:

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

См. пример работы регулярного выражения.

Подробности

  • ГОСТ - строка ГОСТ
  • \s* - 0 и более пробельных символов
  • \d+ - 1 и более цифр
  • \. - символ точки
  • \d+ - 1 и более цифр
  • - - дефис
  • \d+ - 1 и более цифр.

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 )
READ ALSO
Вывести 3 рандомных числа из массива

Вывести 3 рандомных числа из массива

У меня есть две таблицыВ одной таблице id пользователей, в другой id пользователей, которых функция рандома не должна вызвать

129
Вывод на экран русских символов php

Вывод на экран русских символов php

День добрый! Не могу понять почему при выводе на экран всей строки отображается как должно, а при переборе �? Подскажите в чем дело

140
Utm метка в заявке

Utm метка в заявке

Нужно чтобы в заявке с формы отображалось ключевое слово, по которому пользователь перешел на сайтКто-нибудь знает как реализовать? Обработчик...

118