MakeRegExp - отработать регулярное выражение на тексте и оттрассировать разбор.

MakeRegExp предназначена для проверки и отладки регулярных выражений. Она надстроена над функцией PHP: preg_match_all. Функция запускает указанное регулярное выражение по требуемому тексту и показывает все найденные фрагменты текста в соответствии с регулярным выражением.

MakeRegExp может использоваться для настройки функции Findes перед встраиваем её в код сценария PHP.

Синтаксис

$Result=MakeRegExp($pattern,$text,&$matches=null,$isTrass=mriIsDeprecated);

Параметры

$pattern - текст регулярного выражения;
$text    - текст, который должен быть обработан регулярным выражением;
$matches - массив найденных фрагментов и позиций их начала после работы
регулярного выражения (параметр по ссылке);
$isTrass - режим трассировки найденных соответствий регулярному выражению:

mriStandTracing - трассировка результатов стандартным выводом;
mriInstallTrace - установленная трассировка MakeRegExp;
mriTracingBlock - трассировка заблокирована;
mriIsDeprecated - разбор и сообщение устаревшего использования (по умолчанию).

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

$Result  - количество найденных соответствий регулярному выражению. 
$Result=0, если соответствий не найдено.

Зарегистрированные ошибки/исключения

FetchStrObsolete - "Устарела функция выборки подстроки MakeRegExp".
<?php namespace prown;

// PHP7/HTML5, EDGE/CHROME                               *** MakeRegExp.php ***

// ****************************************************************************
// * TPhpPrown     Отработать регулярное выражение на тексте и оттрассировать *
// *               разбор. Рекомендуется использовать только для трассировки. *
// * Для выборки подстроки по регулярному выражению следует пользоваться дру- *
// * гими функциями (например, Findes).
// *                                                                          *
// * v1.1, 21.05.2019                              Автор:       Труфанов В.Е. *
// * Copyright © 2018 tve                          Дата создания:  02.04.2018 *
// ****************************************************************************

require_once "iniConstMem.php";
require_once 
"iniErrMessage.php";
require_once 
"MakeUserError.php";

// ****************************************************************************
// *  Выполнить функцию preg_match_all, при необходимости, отттрассировать ее *
// ****************************************************************************
function MakeRegExp($pattern,$text,&$imatches=null,$isTrass=mriIsDeprecated)
{
   
$Prefix='TPhpPrown';
   
// Готовим массив результатов
   
if ($imatches===null$matches=array(); 
   else 
$matches=$imatches;
   
// Выполняем регулярное выражение и получаем результаты поиска
   
$Result=preg_match_all($pattern,$text,$matches,PREG_OFFSET_CAPTURE);
   
// Выводим исходные данные трассировки
   
if (($isTrass==mriStandTracing)||($isTrass==mriInstallTrace))
   {
      echo 
'<br>'.'$text: <strong>'.$text.'</strong>';
      echo 
'<br>'.'$pattern: <strong>'.$pattern.'</strong><br>';
   }
   
// Выполняем трассировку результатов стандартным выводом
   
if ($isTrass==mriStandTracing)
   {
      echo 
'mriStandTracing:<br>';
      
print_r($matches); 
   }
   
// Выполняем установленную трассировка MakeRegExp
   
if ($isTrass==mriInstallTrace)
   {
      echo 
'mriInstallTrace:';
      
// Показываем нулевой результат, если поиск неудачный  
      
if ($Result==0)
      {
         echo 
'<br>'.'$Result=0';
      }
      
// Формируем и показываем массив найденных  результатов: 
      // что найдено и позиция
      
else 
      {
         for (
$i=0$i<count($matches); $i++)
           {
            
$findes=$matches[$i];    
            for (
$j=0$j<count($findes); $j++)
            {
               echo 
'<br>'.
               
'$matches['.$i.']['.$j.'][0] = <strong>'.$matches[$i][$j][0].'</strong> ... '.
               
'$matches['.$i.']['.$j.'][1] = <strong>'.$matches[$i][$j][1].'</strong>';
            }
         }
      }
   }
   
// Если трассировка не нужна, то выдаем сообщение:
   // "Устарела выборка подстроки регулярным выражением"
   
if ($isTrass==mriIsDeprecated)
   {
      
MakeUserError(FetchStrObsolete,'TPhpPrown',rvsCurrentPos,E_USER_DEPRECATED);
   }
   
// Возвращаем результат регулярного выражения
   
$imatches=$matches;
   return 
$Result;
}
// ********************************************************* MakeRegExp.php ***


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


MakeRegExp


$text: В этой строке ищется 'это' функцией MakeRegExp
$pattern: /это/u
mriStandTracing:
Array ( [0] => Array ( [0] => Array ( [0] => это [1] => 3 ) [1] => Array ( [0] => это [1] => 39 ) ) )
MakeRegExp("/это/u","В этой строке ищется 'это' функцией MakeRegExp"); .....
Подстроки "это" найдены, стандартная трассировка

$text: В этой строке ищется 'эти' функцией MakeRegExp
$pattern: /эти/u
mriInstallTrace:
$matches[0][0][0] = эти ... $matches[0][0][1] = 39
MakeRegExp("/эти/u","В этой строке ищется 'эти' функцией MakeRegExp"); .....
Подстрока "эти" найдена, установленная трассировка MakeRegExp

MakeRegExp("/этот/u","В этой строке ищется не 'это'"); .....................
Подстроки "этот" не найдено
MakeRegExp("/это/u","Здесь ищется 'это'",$matches,mriTracingBlock); ........ Подстрока "это" найдена, трассировка заблокирована

[TPhpPrown] Устарела функция выборки подстроки MakeRegExp
MakeRegExp("/это/u","Здесь ищется 'это'"); .................................
Подстрока "это" найдена, сообщение устаревшего использования
1/1 test cases complete: 13 passes, 0 fails and 0 exceptions.