Php как найти текст в скобках

What’s the best/most efficient way to extract text set between parenthesis? Say I wanted to get the string «text» from the string «ignore everything except this (text)» in the most efficient manner possible.

So far, the best I’ve come up with is this:

$fullString = "ignore everything except this (text)";
$start = strpos('(', $fullString);
$end = strlen($fullString) - strpos(')', $fullString);

$shortString = substr($fullString, $start, $end);

Is there a better way to do this? I know in general using regex tends to be less efficient, but unless I can reduce the number of function calls, perhaps this would be the best approach? Thoughts?

asked Oct 13, 2008 at 2:08

Wilco's user avatar

1

i’d just do a regex and get it over with. unless you are doing enough iterations that it becomes a huge performance issue, it’s just easier to code (and understand when you look back on it)

$text = 'ignore everything except this (text)';
preg_match('#((.*?))#', $text, $match);
print $match[1];

answered Oct 13, 2008 at 2:16

Owen's user avatar

OwenOwen

82.4k21 gold badges118 silver badges114 bronze badges

7

So, actually, the code you posted doesn’t work: substr()'s parameters are $string, $start and $length, and strpos()'s parameters are $haystack, $needle. Slightly modified:

$str = "ignore everything except this (text)";
$start  = strpos($str, '(');
$end    = strpos($str, ')', $start + 1);
$length = $end - $start;
$result = substr($str, $start + 1, $length - 1);

Some subtleties: I used $start + 1 in the offset parameter in order to help PHP out while doing the strpos() search on the second parenthesis; we increment $start one and reduce $length to exclude the parentheses from the match.

Also, there’s no error checking in this code: you’ll want to make sure $start and $end do not === false before performing the substr.

As for using strpos/substr versus regex; performance-wise, this code will beat a regular expression hands down. It’s a little wordier though. I eat and breathe strpos/substr, so I don’t mind this too much, but someone else may prefer the compactness of a regex.

A J's user avatar

A J

3,97014 gold badges38 silver badges53 bronze badges

answered Oct 13, 2008 at 2:18

Edward Z. Yang's user avatar

Edward Z. YangEdward Z. Yang

26.2k16 gold badges80 silver badges109 bronze badges

1

Use a regular expression:

if( preg_match( '!(([^)]+))!', $text, $match ) )
    $text = $match[1];

answered Oct 13, 2008 at 3:34

Rob's user avatar

RobRob

47.9k5 gold badges73 silver badges91 bronze badges

i think this is the fastest way to get the words between the first parenthesis in a string.

$string = 'ignore everything except this (text)';
$string = explode(')', (explode('(', $string)[1]))[0];
echo $string;

answered Apr 10, 2020 at 4:34

rüff0's user avatar

rüff0rüff0

8981 gold badge12 silver badges26 bronze badges

The already posted regex solutions — ((.*?)) and (([^)]+)) — do not return the innermost strings between an open and close brackets. If a string is Text (abc(xyz 123) they both return a (abc(xyz 123) as a whole match, and not (xyz 123).

The pattern that matches substrings (use with preg_match to fetch the first and preg_match_all to fetch all occurrences) in parentheses without other open and close parentheses in between is, if the match should include parentheses:

([^()]*)

Or, you want to get values without parentheses:

(([^()]*))        // get Group 1 values after a successful call to preg_match_all, see code below
(K[^()]*(?=))    // this and the one below get the values without parentheses as whole matches 
(?<=()[^()]*(?=)) // less efficient, not recommended

Replace * with + if there must be at least 1 char between ( and ).

Details:

  • ( — an opening round bracket (must be escaped to denote a literal parenthesis as it is used outside a character class)
  • [^()]* — zero or more characters other than ( and ) (note these ( and ) do not have to be escaped inside a character class as inside it, ( and ) cannot be used to specify a grouping and are treated as literal parentheses)
  • ) — a closing round bracket (must be escaped to denote a literal parenthesis as it is used outside a character class).

The (K part in an alternative regex matches ( and omits from the match value (with the K match reset operator). (?<=() is a positive lookbehind that requires a ( to appear immediately to the left of the current location, but the ( is not added to the match value since lookbehind (lookaround) patterns are not consuming. (?=() is a positive lookahead that requires a ) char to appear immediately to the right of the current location.

PHP code:

$fullString = 'ignore everything except this (text) and (that (text here))';
if (preg_match_all('~(([^()]*))~', $fullString, $matches)) {
    print_r($matches[0]); // Get whole match values
    print_r($matches[1]); // Get Group 1 values
}

Output:

Array ( [0] => (text)  [1] => (text here) )
Array ( [0] => text    [1] => text here   )

answered May 13, 2019 at 14:08

Wiktor Stribiżew's user avatar

Wiktor StribiżewWiktor Stribiżew

603k37 gold badges435 silver badges547 bronze badges

This is a sample code to extract all the text between ‘[‘ and ‘]’ and store it 2 separate arrays(ie text inside parentheses in one array and text outside parentheses in another array)

   function extract_text($string)
   {
    $text_outside=array();
    $text_inside=array();
    $t="";
    for($i=0;$i<strlen($string);$i++)
    {
        if($string[$i]=='[')
        {
            $text_outside[]=$t;
            $t="";
            $t1="";
            $i++;
            while($string[$i]!=']')
            {
                $t1.=$string[$i];
                $i++;
            }
            $text_inside[] = $t1;

        }
        else {
            if($string[$i]!=']')
            $t.=$string[$i];
            else {
                continue;
            }

        }
    }
    if($t!="")
    $text_outside[]=$t;

    var_dump($text_outside);
    echo "nn";
    var_dump($text_inside);
  }

Output:
extract_text(«hello how are you?»);
will produce:

array(1) {
  [0]=>
  string(18) "hello how are you?"
}

array(0) {
}

extract_text(«hello [http://www.google.com/test.mp3] how are you?»);
will produce

array(2) {
  [0]=>
  string(6) "hello "
  [1]=>
  string(13) " how are you?"
}


array(1) {
  [0]=>
  string(30) "http://www.google.com/test.mp3"
}

answered Jan 29, 2014 at 8:22

Sachin Murali G's user avatar

1

This function may be useful.

    public static function getStringBetween($str,$from,$to, $withFromAndTo = false)
    {
       $sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
       if ($withFromAndTo)
         return $from . substr($sub,0, strrpos($sub,$to)) . $to;
       else
         return substr($sub,0, strrpos($sub,$to));
    }
    $inputString = "ignore everything except this (text)";
    $outputString = getStringBetween($inputString, '(', ')'));
    echo $outputString; 
    //output will be test

    $outputString = getStringBetween($inputString, '(', ')', true));
    echo $outputString; 
    //output will be (test)

strpos() => which is used to find the position of first occurance in a string.

strrpos() => which is used to find the position of first occurance in a string.

answered May 2, 2017 at 3:46

vijay's user avatar

vijayvijay

3192 silver badges8 bronze badges

function getStringsBetween($str, $start='[', $end=']', $with_from_to=true){
$arr = [];
$last_pos = 0;
$last_pos = strpos($str, $start, $last_pos);
while ($last_pos !== false) {
    $t = strpos($str, $end, $last_pos);
    $arr[] = ($with_from_to ? $start : '').substr($str, $last_pos + 1, $t - $last_pos - 1).($with_from_to ? $end : '');
    $last_pos = strpos($str, $start, $last_pos+1);
}
return $arr; }

this is a little improvement to the previous answer that will return all patterns in array form:

getStringsBetween(‘[T]his[] is [test] string [pattern]’) will return:

answered Apr 8, 2019 at 8:21

Mamed Shahmaliyev's user avatar

function getAllStrings($inString, $inStart, $inEnd, $inBetween = FALSE)
{
   $list      = array();
   $last_pos  = strpos($inString, $inStart, 0);

   $len_start = strlen($inStart);
   $len_end   = strlen($inEnd);

   while ($last_pos !== FALSE)
   {
      $end_pos  = strpos($inString, $inEnd, $last_pos + $len_start);
      $list[]   = ($inBetween ? $inStart : '').substr($inString, $last_pos + $len_start, $end_pos - ($last_pos + $len_start)).($inBetween ? $inEnd : '');
      $last_pos     = strpos($inString, $inStart, $end_pos + $len_end);
   }

   return $list;
}

This function:

  • accepts same delimiters — ex. a single quote (‘test’).
  • accepts long delimiters — ex. a combination (!@#test!@#)

answered May 23 at 11:08

Ivanski's user avatar

New contributor

Ivanski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

function getAllStrings($inString, $inStart, $inEnd, $inBetween = FALSE)
{
   $list      = array();
   $last_pos  = strpos($inString, $inStart, 0);

   $len_start = strlen($inStart);
   $len_end   = strlen($inEnd);

   while ($last_pos !== FALSE)
   {
      $end_pos  = strpos($inString, $inEnd, $last_pos + $len_start);
      $list[]   = ($inBetween ? $inStart : '').substr($inString, $last_pos + $len_start, $end_pos - ($last_pos + $len_start)).($inBetween ? $inEnd : '');
      $last_pos     = strpos($inString, $inStart, $end_pos + $len_end);
   }

   return $list;
}

This function:

  • accepts same delimiters — ex. a single quote (‘test’).
  • accepts long delimiters — ex. a combination (!@#test!@#)

answered May 23 at 13:38

Ivanski's user avatar

New contributor

Ivanski is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

Используем метод substr(string $string, int $offset, ?int $length = null): string для получения подстроки строки, который возвращает подстроку строки string, начинающейся с offset символа по счету и длиной length символов.

$str = "TestPage[index]";
$offset = strpos($str, "["); // возвращает index "["
$length = strpos($str, "]")-strpos($str, "["); //для нахождения длины строки вычтем из индекса "]" индекс "[", которые найдём при помощи strpos
$result = substr($str,$offset+1, $length-1); // +1 и -1, так как нам не нужно включать "[" и "]"
echo $result; // index

Можно записать сразу так:

$str = "TestPage[index]";
echo substr($str,strpos($str, "[")+1, strpos($str, "]")-strpos($str, "[")-1); //index

Решение через preg_match с использованием регулярного выражения:

$str = "TestPage[index]";
$output_array = array();
preg_match('/(?<=[).+?(?=])/', $str, $output_array);
echo $output_array[0]; // index

Как заменить элемент в строке, еще сложнее найти и заменить элемент в строке, это может быть слово, часть слова… код Какие функции существую для замены в строке!?

Я не буду обозревать все функции которые существуют! Расскажу о той, которой сам пользуюсь! Эта функция str_replace.

  • Как заменить один элемент строки!?

    У нас есть некая строка, в которой требуется найти какой-то элемент и заменить его на другой!

    Здесь текст с нижним тире_, которое_ надо заменить на обыкновенное —

    Мы воспользуемся функцией str_replace

    Для этой функции и множества аналогичных нужно запомнить, что внутри неё…

    Я запомнил так: str_replace(«ЧТО»,»НА ЧТО»,»ГДЕ»);

    Нам потребуется переменная…

    $переменная = «Здесь текст с нижним тире_, которое_ надо заменить на обыкновенное -«;

    Замена str_replace будет иметь такой вид:

    $переменная = str_replace(«_»,»-«, $переменная);

    Результат:

    Как видим наше подчеркивание заменилось удачно!

    Здесь текст с нижним тире

    , которое

    надо заменить на обыкновенное —

  • Как заменить несколько элементов строки!?

    Чем еще замечательна функция str_replace – тем, что она умеет заменять не только один элемент строки, но и несколько!

    Почему я решил сегодня написать эту страницу… вчера у меня задача стояла заменить в строке несколько элементов например:

    Если вы нажмете по данной ссылке и посмотрите в адресную строку, то увидите вот такой адрес…

    Чтобы сто раз не повторять поместим её в переменную — она нам понадобится…

    $url = «https://dwweb.ru/?tema=php&show_spisok=PHP»;

    В этой строке нам нужно заменить три элемента … в общем не важно сколько будет у вас элементов и сколько их вообще нужно заменить в строке!

    Поэтому я и люблю эту функцию!

    У нас есть три элемента, которые мне требовалось заменить… » ? & = »

    Создадим массив с элементами, которые нужно заменить в строке:

    $array_replace = array(«&», «?», «=»);

    Функция с переменными и массивом будет выглядеть так:

    $rezult = str_replace($array_replace, «_», $url) ;

    Результат замены в строке нескольких элементов на один php:

    https://dwweb.ru/_tema_php_show_spisok_PHP

  • Как заменить пробелы в Php

    Для того, чтобы заменить пробелы в php, нам опять потребуется:

    1). Тестовый текст в переменной…, в котором будут пробелы:

    $objekt = «Это тестовый текст с пробелами, которые мы будем заменять, на что-то, не важно на что!»;

    Берем нашу функцию для замены, в первом значении функции ставим пробел… во втором.. ставим , то на что будем заменять пробел,

    ну например <red>Ё</red>, и третьим будет наша переменная и выведем с помощью echo прямо здесь…:

    echo str_replace( » » , $replace_0 , $objekt )

    Результат поиска измены пробела на что-то:

    Это

    Ё

    тестовый

    Ё

    текст

    Ё

    с

    Ё

    пробелами,

    Ё

    которые

    Ё

    мы

    Ё

    будем

    Ё

    заменять,

    Ё

    на

    Ё

    что-то,

    Ё

    не

    Ё

    важно

    Ё

    на

    Ё

    что!

  • Как заменить слово/слова в Php

    Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!bravo
    смайлы(если вы не поняли, то он кричит — «это гениально!!!»)

    И тут внимание! Выше было показано, как можно найти, какой-то элемент в строке и заменить его! Еще можно было заменить из массива!
    А что если мы заменим… массив на массив!? Интересно!? Тогда погнали!
    Для этого… нам понадобится… массив $search

    $search_1 = array(«слово»,»слова»);

    Далее нам потребуется массив, на который будем менять… слова будут те же. но вот мы обернем их в цвет…

    $replace_1 = array(«<span style=»color: red»>слово</span >»,»<span style=»color: #1b00ff;»>слова</span>»);

    Ну и собственно текст, где и будем менять массив на массив:

    $subject_1 = «Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!, а все слова, которые будут иметь в совсем составе слово «слова» , будут покрашены в синий «;

    И выведем прямо здесь нашу замену слова:

    echo str_replace($search_1, $replace_1, $subject_1 );

    Результат замены слова

    Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!, а все слова, которые будут иметь в совсем составе слово «слова» , будут покрашены в синий

  • Найти первое повторяющееся слово и выделить его

    Условие задачи:

    Требуется найти в тексте первое повторяющиеся слово и подчеркнуть его(выделить).

    Предположим, что вам нужно найти первое повторяющееся слово в тексте и его же нужно подчеркнуть!

    Создадим сразу несколько переменных с разным текстом:

    $text = ‘This is do a test — «do do do»‘;
    $text_1 = ‘Это тестовый текст в котором есть повторяющееся слово текст’;
    $text_2 = ‘Это слово и тестовый текст в котором есть повторяющееся слово и слово текст’;
    $text_3 = ‘Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст ‘;

    Разбиваем текст по пробелу с помощью explode

    $ex = explode(‘ ‘, $thetext);

    Далее нам потребуется два цикла. Внутри второго чикла пишем условие, если слово в массиве будет повторяться, то создаем счетчик, по имени слова:

    $$ex[$i] ++;

    Далее следующее условие, если счетчик будет равен 2, то прерываем цикл :

    break;

    Соберем циклы:

    $ex = explode(‘ ‘, $thetext);
    for ($i = 0; $i < count($ex); $i++)
    {
       for ($j = 0; $j < count($ex); $j++)
       {
           if (

    ($ex[$i]) ==

    ( $ex[$j]) )
           {
               $$ex[$i] ++;
               if($$ex[$i] ==2) {$the_word =

    ( $ex[$j] ); break;}
           }
       }
       if($the_word){break;}
    }

    Создаем третий цикл, в котором, как только встретится слово найденное в предыдущих двух циклах, то сразу его выделим цветом слово в массиве с помощью тега mark

    for ($d = 0; $d < count($ex); $d++)
    {
      if(

    ( $ex[$d] ) == $the_word) { $ex[$d] = ‘<mark>’.$ex[$d].'</mark>’; break; }
    }

    Далее Измененный массив преобразуем в строку:

    implode(‘ ‘, $ex);

    Запакуем это все в функцию :

    Добавлено… в условии and $ex [$i][2] — (2 — 1 = 1) количество символов, отсекать одинарные буквы. Если требуется отсечь предлоги с двумя и менее буквами — $ex [$i][2]

    function find_first($thetext)
    {
    $ex = explode(‘ ‘, $thetext);
    for ($i = 0; $i < count($ex); $i++)
    {
       for ($j = 0; $j < count($ex); $j++)
       {
           if (

    ($ex[$i]) ==

    ( $ex[$j]) and $ex [$i][1] )
           {
               $$ex[$i] ++;
               if($$ex[$i] ==2) {$the_word =

    ( $ex[$j] ); break;}
           }
       }
       if($the_word){break;}
    }
    for ($d = 0; $d < count($ex); $d++)
    {
          if(

    ( $ex[$d] ) == $the_word) { $ex[$d] = ‘<mark>’.$ex[$d].'</mark>’; break; }
    }
    return implode(‘ ‘, $ex);
    }

    Выведем результаты, нахождения первого повторяющегося слова в тексте :

    echo find_first($text);
    echo ‘<br>’;
    echo find_first($text_1);
    echo ‘<br>’;
    echo find_first($text_2);
    echo ‘<br>’;
    echo find_first($text_3);

    Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его :

    This is do a test — «do do do»

    Это тестовый текст в котором есть повторяющееся слово текст

    Это слово и тестовый текст в котором есть повторяющееся слово и слово текст

    Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст

    P.S.
    26.11.2020

    Сохранил старый текст на картинке и дальше расскажу зачем… и сравните 4 строку на скрине и выше идущую строку №4:

    Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его :
    Как решил задачку.

    Написал я данную функцию.

    И мне нужно было куда-то ехать.

    Сел на сиденье и… тут меня осенило, совсем простой способ, чтобы мы могли найти и сравнивать слово в массиве и повторяющееся слово, их просто нужно привести к одному регистру. Вроде бы такая элементарная вещь, но как-то она сразу мне не пришла в голову.

    И такая функция вполне способна решить проблему «ПРОПИСНЫХ» букв в начале предложения!

    Поэтому следующий пункт, где я занимался какими-то извращениями просто не нужен! wall
    смайлы

  • Замена слов в скобках php

    Тут встретился поисковый запрос — Замена слов в скобках php — я не знаю, что конкретно вы имели ввиду задавая такой вопрос поисковику, но я тут вспомнил, замечательную фишку. которую уже использую с незапамятных времен.
    В чем фишка!?
    Как это работает… например, очень частое применение разных ссылок, привело меня к мысли, что надо создать скрипт, который будет обрабатывать, слово в скобках.

    Если напишу вот так : php в коде… либо css , то никаких квадратных скобок вы не увидите… смотри скрин ниже:

    Замена слов в скобках php

    После обработки php скриптом, это будут обычные ссылки, слова в скобках были заменены на :

    В первом случае с php:

    <a href=»https://dwweb.ru/?tema=php» target=»_blank»>php</a>

    Во втором случае с css:

    <a href=»https://dwweb.ru/?tema=css» target=»_blank»>css</a>

    Таких слов огромное количество и естественно, что запомнить их все невозможно, поэтому у меня есть кнопка, которая выводит все эти слова в других кнопках, и достаточно кнопку нажать — она вставляется с помощью скрипта js.

    Нажмите, чтобы открыть в новом окне.

    Замена слов в скобках php

    Вот здесь мелькает эта панель, откуда и вставляются все требуемые слова в скобках.
    Вставка по нажатию на кнопки была реализована в BBCODE
    Продолжение:

    Поскольку довольно редкий поисковый запрос… напишите — вам интересен этот скрипт?!

  • Онлайн нахождение первого и повторяющихся слов

    Далее мы используем форму для ввода данных, внутри уже расположен какой-то текст.

    Необходимо выбрать, что будем искать :

    Найти первое повторяющиеся слово в тексте… и

    Найти все повторяющиеся слова в тексте.

    Выбираем режим — нажимаем найти!

    Нужно выбрать один из пунктов!

  • Скрипт — найти все повторяющиеся слова в тексте и выделить их.

    15.04.2021

    Через некоторое время пришлось вернуться к этой теме, поскольку поиск всех повторяющихся слов работал несколько некорректно!

    Это уже реализовано и внедрено выше пунктом — поиск всех повторяющихся слов.

    Не буду рассказывать всю функцию.

    А лишь основное:

    Алгоритм нахождения всех двойных слов и подсветка…

    Возьмем из скрипта — нахождение первого повторяющегося слова — первый цикл, удалим break;

    И добавим — выделено красным(1,3) — создание массива с повторяющимися словами.

    Отсекаем предлоги в два и менее знака(and $ex [$i][2]).

    $array = array();

    for ($i = 0; $i < count($ex ); $i++)

    {

      for ($j = 0; $j < count($ex ); $j++)

      {

        if ( trim(($ex [$i])) == trim(($ex [$j])) and $ex [$i][2])

        {

          $$ex [$i] ++;

          if($$ex [$i] ==2) {$array[] = trim($ex [$i]);}

        }

      }

    }

    Далее нам придется решить, как искать и сравнивать повторяющиеся такие слова, как возьмем слово «лампа» :

    Лампа и лампа

    лампа и лампа.

    лампа и лампа(и любой знак препинания и др.знаки)

    лампа и лампа(и любой тег html, например перенос <br>)

    В общем можно много и дого рассказывать -см выше — «найти все повторяющиеся слова».

    Скачать скрипт писка и выделения повторяющихся слов в тексте:

    Скачать скрипт.

  • Поисковые запросы.

    О поисковых запросах

    Php найти слово в скобках

    Поисковый запрос — «php найти слово в скобках«, к сожалению, этого недостаточно, найти и… что сделать!?

    php найти слово в скобках — подчеркнуть!? На странице рассмотрели нахождение повторяющегося слова

    php найти слово в скобках — удалить!?

    php найти слово в скобках — заменить!? Также была тема замены слова в скобках(скобки без разницы какие, нужно в скрипте это прописать)

    php найти слово в скобках — получить текст внутри скобок??? Для данного вопроса, необходимы уточнения… первое ли вхождение в строке, либо все вхождения в строке.

  • Заменить N-ый символ в строке php

    Поисковый запрос «заменить 5 символ в строке php«, «заменить 2 символ в строке php» — в общем объединим, данные поисковые запросы в один: «Заменить N-ый символ в строке php«
    Как это сделать!?
    Если речь идет о «кириллице в utf-8», то придется поднапрячься.

    А если для латиницы, то вообще легко.

    Раз уж пошла речь о замене 5, то и возьмем это число и фразу:

    Hello world!

    Обратимся к пятому элементу строки, как к ячейке массива и поставим туда, какой-то знак, пусть это будет вопросительный .

    $NEW_TEXT[5] = ‘?’;

    Вопрос на засыпку… почему нельзя таким образом заменить символ на несколько символов… что произойдет!?

    Смотрим результат…

    � � �N��Nh� � � �чество знаков.

    Если вы не ответили на вопрос, почему нельзя заменить один символ на несколько символов, то ответ простой! Символ можно заменить только на 1 символ! Иначе структура переменной поломается… и замену не увидите, и все, что после этого символа, вместе с символом…

    А если нужно N-ый символ строки заменить на слово!?

    На предложение и т.д… да на что угодно…

    Легко!

    Разобьем(explode) строку в массив, по тому символу, который хотим заменить :

    $TEXT_EX = explode($NEW_TEXT[5],$NEW_TEXT);

    Соединим(implode) массив в строку, в первое значение помещаем все то, на что хотим заменить. Либо туда переменную.

    $TEXT_EX = implode(‘ <red>Здесь любой текст, любой длины</red> ‘, $TEXT_EX);

    Смотрим результат…

    Hello

    Здесь любой текст, любой длины

    world!

    Получение данных с помощью функций preg_match() и preg_match_all().

    1

    Текст из скобок

    Извлечение содержимого из круглых, квадратных и фигурных скобок:

    $text = '
    	Телеобъектив: диафрагма [ƒ/2.8]
    	Широкоугольный объектив: (диафрагма ƒ/1.8)
    	По беспроводной сети: {до 13 часов}
    	Поддержка диапазона: <Dolby Vision и HDR10>
    ';
    
    /* [...] */
    preg_match_all("/[(.+?)]/", $text, $matches);
    print_r($matches[1]);
    
    /* (...) */
    preg_match_all("/((.+?))/", $text, $matches);
    print_r($matches[1]);
    
    /* {...} */
    preg_match_all("/{(.+?)}/", $text, $matches);
    print_r($matches[1]);
    
    /* <...> */
    preg_match_all("/<(.+?)>/", $text, $matches);
    print_r($matches[1]);

    PHP

    Результат:

    Array 
    (
        [0] => ƒ/2.8
    )
    Array 
    (
        [0] => диафрагма ƒ/1.8
    )
    Array
    (
        [0] => до 13 часов
    )
    Array
    (
        [0] => Dolby Vision и HDR10
    )

    2

    Текст из HTML тегов

    $text = '
    	<title>Тег TITLE</title>
    	<h1>Тег H1</h1>
    	<p>Текст 1</p>
    	<p>Текст 2</p>
    ';
    
    /* <title> */
    preg_match('/<title[^>]*?>(.*?)</title>/si', $text, $matches);
    echo $matches[1];
    
    /* <h1> */
    preg_match('/<h1[^>]*?>(.*?)</h1>/si', $text, $matches);
    echo $matches[1];
    
    /* Извлекает текст из всех <p> */
    preg_match_all('/<p[^>]*?>(.*?)</p>/si', $text, $matches);
    print_r($matches[1]);

    PHP

    Результат:

    Тег TITLE
    
    Тег H1
    
    Array
    (
        [0] => Текст 1
        [1] => Текст 2
    )

    3

    URL из текста

    $text = 'Text http://ya.ru text http://google.ru text.';
    preg_match_all('/(http://|https://)?(www)?([da-z.-]+).([a-z.]{2,6})([/w.-?%&]*)*/?/i', $text, $matches);
    print_r($matches[0]);

    PHP

    Результат:

    Array
    (
        [0] => http://ya.ru
        [1] => http://google.ru
    )

    4

    href из ссылок

    $text = '
    	<a href="http://ya.ru">Яндекс</a>
    	<a href="http://google.ru">Google</a>
    	<a href="http://mail.ru">Mail.ru</a>
    ';
    
    preg_match_all('/<a.*?href=["'](.*?)["'].*?>/i', $text, $matches);
    print_r($matches[1]);

    PHP

    Результат:

    Array
    (
        [0] => http://ya.ru
        [1] => http://google.ru
        [2] => http://mail.ru
    )

    5

    Анкоры ссылок

    $text = '
    	<a href="http://ya.ru">Яндекс</a>
    	<a href="http://google.ru">Google</a>
    	<a href="http://mail.ru">Mail.ru</a>
    ';
    
    preg_match_all('/<a.*?>(.*?)</a>/i', $text, $matches);
    print_r($matches[1]);

    PHP

    Результат:

    Array
    (
        [0] => Яндекс
        [1] => Google
        [2] => Mail.ru
    )

    6

    Src из тегов img

    $text = 'text <img alt="" src="/logo.png"> text';
    preg_match_all('/<img.*src="(.*)".*>/is', $text, $matches);
    print_r($matches[1]);

    PHP

    Результат:

    Array
    (
        [0] => /logo.png
    )

    7

    E-mail адреса из текста

    $text = 'text admin@mail.ru text text text admin@ya.ru';
    preg_match_all('/([a-z0-9_-]+.)*[a-z0-9_-]+@([a-z0-9][a-z0-9-]*[a-z0-9].)+[a-z]{2,6}/i', $text, $matches);
    print_r($matches[0]);

    PHP

    Результат:

    Array
    (
        [0] => admin@mail.ru
        [1] => admin@ya.ru
    )

    8

    Цвета

    HEX/HEXA

    $css = '
    	body {
    		color: #000;
    		background: #4545;
    	}
    	header {
    		color: #111111;
    		background: #00000080;
    	}
    ';
    
    preg_match_all('/#(?:[0-9a-f]{3,8})/i', $css, $matches);	
    print_r($matches[0]);

    PHP

    Результат:

    Array
    (
        [0] => #000
        [1] => #4545
        [2] => #111111
        [3] => #00000080
    )

    RGB/RGBA

    $css = '
    	body {
    		color: rgb(0,0,0); 
    		background: rgba(17,85,68,0.33);
    	}
    	header {
    		color: rgb(17,17,17); 
    		background: rgba(0,0,0,0.5);
    	}
    ';
     
    preg_match_all('/((rgba)((d{1,3},s?){3}(1|0?.?d+))|(rgb)(d{1,3}(,s?d{1,3}){2}))/i', $css, $matches);	
    print_r($matches[0]);

    PHP

    Array
    (
        [0] => rgb(0,0,0)
        [1] => rgba(17,85,68,0.33)
        [2] => rgb(17,17,17)
        [3] => rgba(0,0,0,0.5)
    )

    Есть строка вида «некий текст[любое число]»
    Как в php получить значение находящиеся в квадратных скобках, вместе с самими квадратными скобками?
    То есть из строки «некий текст[любое число]» надо получить «[любое число]».

    Если быть до конца точным то мне надо получить строку без всего, того что есть в квадратных скобках, оставив только «некий текст»

    в php для этого можно использовать
    preg_replace($pattern, "", "text[3]"); // text
    Вот что указать в $pattern?

    Понравилась статья? Поделить с друзьями:
  • Как можно найти потерянный телефон по imei
  • Как найти коэффициент широты ассортимента пример
  • Как найти реальный доход при инфляции
  • Как исправить stl в blender
  • Как найти потерянную карту пятерочка