Findes - выбрать из строки подстроку, соответствующую регулярному выражению.

Функция выполняет конкретную и часто возникающую задачу - выбрать из строки подстроку по заданному регулярному выражению и узнать её начальную позицию в этой строке.

Findes возвращает первое или единственное вхождение подстроки в исходной строке, а в случае неудачи возвращает пустую строку.

Через третий параметр функция по ссылке возвращает позицию найденного фрагмента, начиная с нулевого значения, или -1, если фрагмент не найден.

Замечание: Функция Findes надстроена над функцией PHP: preg_match и находит не более одной подстроки исходной строки, соответствующей регулярному выражению. Для нахождения всех вхождений в строку по регулярному выражению следует воспользоваться функцией MakeRegExp.

Синтаксис

$Result=Findes($preg,$string,&$point)

Параметры

$preg   - текст регулярного выражения;
$string - текст, который должен быть обработан регулярным выражением;
$point  - позиция начала найденного фрагмента после работы регулярного 
выражения (параметр по ссылке). $point=-1, если фрагмент не найден.

Возвращаемое значение

$Result  - найденный фрагментов после работы регулярного выражения или пустая строка, если фрагмент не найден.
<?php namespace prown;

// PHP7/HTML5                                                *** Findes.php ***
// ****************************************************************************
// * TPhpPrown                                   Выбрать из строки подстроку, *
// *                                    соответствующую регулярному выражению *
// *                                                                          *
// * v1.1, 23.05.2019                              Автор:       Труфанов В.Е. *
// * Copyright © 2019 tve                          Дата создания:  02.04.2019 *
// ****************************************************************************

function Findes($preg,$string,&$point=-1)
{
   
$value=preg_match($preg,$string,$matches,PREG_OFFSET_CAPTURE);
   if (
$value>0)
   {
      
$Result=$matches[0][0];
      
$point=$matches[0][1];
   }
   else
   {
      
$Result='';
      
$point=-1;
   }
   return 
$Result;
}
// ************************************************************* Findes.php ***


Сообщения выполненного теста функции

Findes
Findes("/Это/u","Это строка для проверки функции Findes"); ..................... Подстрока "Это" найдена в строке
Findes("/Это/u","Это строка для проверки функции Findes",$point); .............. Фрагмент "Это" найден с позиции 0
Findes("/Findes/u","Это строка для проверки функции Findes",$point); ........... Фрагмент "Findes" найден с байта 59 (не с 32, так как UTF8)
Findes("/строк/u","Это строка для проверки функции Findes",$point); ............ Фрагмент "строк" найден с 7 позиции
Findes("/строки/u","Это строка для проверки функции Findes",$point); ........... Фрагмент "строки" не найден
$string=1234; $preg="/12/u"; Findes($preg,$string,$point); ..................... Поиск в строке, представленной как число, обработан!
1/1 test cases complete: 9 passes, 0 fails and 0 exceptions.