- Match text between HTML class tags
- 2 Answers 2
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
- Извлечение данных с помощью регулярных выражений PHP
- Текст из скобок
- Результат:
- Текст из HTML тегов
- Результат:
- URL из текста
- Результат:
- href из ссылок
- Результат:
- Анкоры ссылок
- Результат:
- Src из тегов img
- Результат:
- E-mail адреса из текста
- Результат:
- Цвета
- HEX/HEXA
- Результат:
- RGB/RGBA
- preg_match
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Примечания
- Смотрите также
Match text between HTML class tags
Now, how can I preg_match_all this, to match only the my_content text? I was trying answers from this question: Preg match text in php between html tags but modifying the regex result in selecting the whole code including HTML tags.
@PhpMyCoder Yes, I do. But I havent found any example on how to process my problem using DOMDocument .
@Rusco Have you ever worked with Javascript? The function calls are essentially the same. And docs are here.
2 Answers 2
The following regex will work for matching between the tags.
With single quotes and double quotes.
If you don’t care if it is a div, ul or etc, remove the from the regex pattern.
I wrote that I need to match content of a specified class tag. The example you gave will match any tag element, and not only with class ips .
@sixeightzero Seems like you have some unescaped quotes in your regex. Make sure to always escape quotes and backslashes in regex.
Thanks.. i use regextester.com to test my regex’s on the fly. always forgetting to escape the quotes. 🙁
Its not that, as I’ve escaped the quotes, also updated my script with your edit and still gives the same message.
Here, use this RegEx to allow variations:
- spaces before or after equals sign
- multiple class names in one class attribute
- multiple attributes after the class attribute
This question is in a collective: a subcommunity defined by tags with relevant content and experts.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.27.43548
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Извлечение данных с помощью регулярных выражений PHP
Получение данных с помощью функций preg_match() и preg_match_all() .
Текст из скобок
Извлечение содержимого из круглых, квадратных и фигурных скобок:
$text = ' Телеобъектив: диафрагма [ƒ/2.8] Широкоугольный объектив: (диафрагма ƒ/1.8) По беспроводной сети: Поддержка диапазона: '; /* [. ] */ 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]);
Результат:
Array ( [0] => ƒ/2.8 ) Array ( [0] => диафрагма ƒ/1.8 ) Array ( [0] => до 13 часов ) Array ( [0] => Dolby Vision и HDR10 )
Текст из HTML тегов
$text = ' Тег H1
Текст 1
Текст 2
'; /* */ preg_match('/]*?>(.*?)/si', $text, $matches); echo $matches[1]; /* */ preg_match('/]*?>(.*?)/si', $text, $matches); echo $matches[1]; /* Извлекает текст из всех
*/ preg_match_all('/
]*?>(.*?)/si', $text, $matches); print_r($matches[1]);
Результат:
Тег TITLE Тег H1 Array ( [0] => Текст 1 [1] => Текст 2 )
URL из текста
$text = 'Text http://ya.ru text http://google.ru text.'; preg_match_all('/(http:\/\/|https:\/\/)?(www)?([\da-z\.-]+)\.([a-z\.])([\/\w\.-\?\%\&]*)*\/?/i', $text, $matches); print_r($matches[0]);
Результат:
Array ( [0] => http://ya.ru [1] => http://google.ru )
href из ссылок
$text = ' Яндекс Google Mail.ru '; preg_match_all('//i', $text, $matches); print_r($matches[1]);
Результат:
Array ( [0] => http://ya.ru [1] => http://google.ru [2] => http://mail.ru )
Анкоры ссылок
$text = ' Яндекс Google Mail.ru '; preg_match_all('/(.*?)/i', $text, $matches); print_r($matches[1]);
Результат:
Array ( [0] => Яндекс [1] => Google [2] => Mail.ru )
Src из тегов img
$text = 'text text'; preg_match_all('//is', $text, $matches); print_r($matches[1]);
Результат:
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]/i', $text, $matches); print_r($matches[0]);
Результат:
Array ( [0] => admin@mail.ru [1] => admin@ya.ru )
Цвета
HEX/HEXA
$css = ' body < color: #000; background: #4545; >header < color: #111111; background: #00000080; >'; preg_match_all('/#(?:[0-9a-f])/i', $css, $matches); print_r($matches[0]);
Результат:
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,\s?)(1|0?\.?\d+)\)|(rgb)\(\d(,\s?\d)\))/i', $css, $matches); print_r($matches[0]);
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) )
preg_match
Ищет в заданном тексте subject совпадения с шаблоном pattern .
Список параметров
В случае, если указан дополнительный параметр matches , он будет заполнен результатами поиска. Элемент $matches[0] будет содержать часть строки, соответствующую вхождению всего шаблона, $matches[1] — часть строки, соответствующую первой подмаске, и так далее.
flags может принимать значение следующего флага: PREG_OFFSET_CAPTURE В случае, если этот флаг указан, для каждой найденной подстроки будет указана ее позиция в исходной строке. Необходимо помнить, что этот флаг меняет формат возвращаемого массива matches в массив, каждый элемент которого содержит массив, содержащий в индексе с номером 0 найденную подстроку, а смещение этой подстроки в параметре subject — в индексе 1.
Обычно поиск осуществляется слева направо, с начала строки. Можно использовать дополнительный параметр offset для указания альтернативной начальной позиции для поиска (в байтах).
Замечание:
Использование параметра offset не эквивалентно замене сопоставляемой строки выражением substr($subject, $offset) при вызове функции preg_match() , поскольку шаблон pattern может содержать такие условия как ^, $ или (?<=x). Сравните:
$subject = «abcdef» ;
$pattern = ‘/^def/’ ;
preg_match ( $pattern , $subject , $matches , PREG_OFFSET_CAPTURE , 3 );
print_r ( $matches );
?>?php
Результат выполнения данного примера:
В то время как этот пример
$subject = «abcdef» ;
$pattern = ‘/^def/’ ;
preg_match ( $pattern , substr ( $subject , 3 ), $matches , PREG_OFFSET_CAPTURE );
print_r ( $matches );
?>?php
Array ( [0] => Array ( [0] => def [1] => 0 ) )
Возвращаемые значения
preg_match() возвращает 1, если параметр pattern соответствует переданному параметру subject , 0 если нет, или FALSE в случае ошибки.
Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Список изменений
Версия | Описание |
---|---|
5.3.6 | Возвращает FALSE если offset больше, чем длина subject . |
5.2.2 | Именованные подмаски теперь позволяют синтаксис (?) и (?’name’), также как и (?P). Предыдущие версии позволяли только (?P). |
Примеры
Пример #1 Поиск подстроки «php» в тексте
// Символ «i» после закрывающего ограничителя шаблона означает
// регистронезависимый поиск.
if ( preg_match ( «/php/i» , «PHP is the web scripting language of choice.» )) echo «Вхождение найдено.» ;
> else echo «Вхождение не найдено.» ;
>
?>?php
Пример #2 Поиск слова «web» в тексте
/* Специальная последовательность \b в шаблоне означает границу слова,
* следовательно, только изолированное вхождение слова ‘web’ будет
соответствовать маске, в отличие от «webbing» или «cobweb» */
if ( preg_match ( «/\bweb\b/i» , «PHP is the web scripting language of choice.» )) echo «Вхождение найдено.» ;
> else echo «Вхождение не найдено.» ;
>
?php
if ( preg_match ( «/\bweb\b/i» , «PHP is the website scripting language of choice.» )) echo «Вхождение найдено.» ;
> else echo «Вхождение не найдено.» ;
>
?>
Пример #3 Извлечение доменного имени из URL
// Извлекаем имя хоста из URL
preg_match ( ‘@^(?:http://)?([^/]+)@i’ ,
«http://www.php.net/index.html» , $matches );
$host = $matches [ 1 ];
?php
// извлекаем две последние части имени хоста
preg_match ( ‘/[^.]+\.[^.]+$/’ , $host , $matches );
echo «доменное имя: < $matches [ 0 ]>\n» ;
?>
Результат выполнения данного примера:
Пример #4 Использование именованных подмасок
/* Это также работает в PHP 5.2.2 (PCRE 7.0) и более поздних версиях,
* однако, вышеуказанная форма рекомендуется для обратной совместимости */
// preg_match(‘/(?\w+): (?\d+)/’, $str, $matches);
Результат выполнения данного примера:
Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008 )
Примечания
Не используйте функцию preg_match() , если необходимо проверить наличие подстроки в заданной строке. Используйте для этого strpos() либо strstr() , поскольку они выполнят эту задачу гораздо быстрее.
Смотрите также
- «Регулярные выражения PCRE»
- preg_quote() — Экранирует символы в регулярных выражениях
- preg_match_all() — Выполняет глобальный поиск шаблона в строке
- preg_replace() — Выполняет поиск и замену по регулярному выражению
- preg_split() — Разбивает строку по регулярному выражению
- preg_last_error() — Возвращает код ошибки выполнения последнего регулярного выражения PCRE