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
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
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
3,97014 gold badges38 silver badges53 bronze badges
answered Oct 13, 2008 at 2:18
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
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ü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ż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
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
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
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
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
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
Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!
смайлы(если вы не поняли, то он кричит — «это гениально!!!»)
И тут внимание! Выше было показано, как можно найти, какой-то элемент в строке и заменить его! Еще можно было заменить из массива!
А что если мы заменим… массив на массив!? Интересно!? Тогда погнали!
Для этого… нам понадобится… массив $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:
Как решил задачку.
Написал я данную функцию.
И мне нужно было куда-то ехать.
Сел на сиденье и… тут меня осенило, совсем простой способ, чтобы мы могли найти и сравнивать слово в массиве и повторяющееся слово, их просто нужно привести к одному регистру. Вроде бы такая элементарная вещь, но как-то она сразу мне не пришла в голову.
И такая функция вполне способна решить проблему «ПРОПИСНЫХ» букв в начале предложения!
Поэтому следующий пункт, где я занимался какими-то извращениями просто не нужен!
смайлы
Замена слов в скобках php
Тут встретился поисковый запрос — Замена слов в скобках php — я не знаю, что конкретно вы имели ввиду задавая такой вопрос поисковику, но я тут вспомнил, замечательную фишку. которую уже использую с незапамятных времен.
В чем фишка!?
Как это работает… например, очень частое применение разных ссылок, привело меня к мысли, что надо создать скрипт, который будет обрабатывать, слово в скобках.
Если напишу вот так : php в коде… либо css , то никаких квадратных скобок вы не увидите… смотри скрин ниже:
После обработки 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.
Нажмите, чтобы открыть в новом окне.
Вот здесь мелькает эта панель, откуда и вставляются все требуемые слова в скобках.
Вставка по нажатию на кнопки была реализована в 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?