PHP

Удаление регулярными выражениями в PHP

Примеры регулярных выражений для удаления данных из текста.

1

Текст и символы

Удалить лишние пробелы перед знаками препинания

$text = 'Многие ! известные ? личности , и по сей день .';
echo preg_replace("/\s+([\.|,|!|\?]+)/", '\\1',$text);

Результат:

Многие! известные? личности, и по сей день.

Оставить в тексте только буквы, цифры и пробел

$text = 'Многие известные. личности, по: сей день.';
echo mb_eregi_replace("[^a-zа-яё0-9 ]", '', $text);

Результат:

Многие известные личности по сей день

Удалить цифры

$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789';               
echo mb_eregi_replace('[0-9]', '', $text);

Результат:

абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz

Удалить латинские буквы

$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789';
echo mb_eregi_replace('[a-z]', '', $text);

Результат:

абвгдеёжзийклмнопрстуфхцчшщъыьэюя  0123456789

Удалить русские буквы

$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789';
echo mb_eregi_replace('[а-яё]', '', $text);

Результат:

 abcdefghijklmnopqrstuvwxyz 0123456789

Удалить все буквы и цифры

$text = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя abcdefghijklmnopqrstuvwxyz 0123456789 .,!?';
echo mb_eregi_replace('[\w]', '', $text);

Результат:

   .,!?

Удалить табуляцию 

echo preg_replace("/[\t]/", '', $text);

Удалить переносы строк

echo preg_replace("/[\r\n]/", '', $text);

Удалить определенное количество символов

Примеры удаляют девять символов в начале и конце текста.

// Удаление с начала
$text = mb_eregi_replace("^.{9}(.*)$", '\\1', $text);
echo $text;

// Удаление с конца
$text = mb_eregi_replace("(.*)[^.]{9}$", '\\1', $text);
echo $text;

Удалить текст до определенного символа

Данные регулярные выражения удаляют все что находится до первого искомого символа,
а также пробел который идет за ним.

$text = 'Многие известные. личности, по: сей - день.';

// Удалить до пробела
echo preg_replace("/^(.*?)(\s)(.*?)$/", '\\3', $text);

// Удалить до "."
echo preg_replace("/^(.*?)(\.\s)(.*?)$/", '\\3', $text);

// Удалить до ","
echo preg_replace("/^(.*?)(,\s)(.*?)$/", '\\3', $text);

// Удалить до ":"
echo preg_replace("/^(.*?)(:\s)(.*?)$/", '\\3', $text);

// Удалить до "-"
echo preg_replace("/^(.*?)(-\s)(.*?)$/", '\\3', $text);

Результат:

известные. личности, по: сей - день.
личности, по: сей - день.
по: сей - день.
сей - день.
день.

Удалить текст после символа

$text = 'Многие известные. личности, по: сей - день.';

// Удалить после пробела
echo preg_replace("/^(.+?)\s.+$/", '\\1', $text);

// Удалить после «.»
echo preg_replace("/^(.+?)\..+$/", '\\1', $text);

// Удалить после «,»
echo preg_replace("/^(.+?),.+$/", '\\1', $text);

// Удалить после «:»
echo preg_replace("/^(.+?):.+$/", '\\1', $text);

// Удалить после «-»
echo preg_replace("/^(.+?)-.+$/", '\\1', $text);

Результат:

Многие
Многие известные
Многие известные. личности
Многие известные. личности, по
Многие известные. личности, по: сей

Удалить скобки с их содержимым

$text = '(Casio G-SHOCK) [GW-9200-1ER] {GW-9200-1E} <Casio G-SHOCK>';

// Удаление (...)
echo preg_replace("/(.*?)\(.*?\)\s?(.*?)/is", '\\1\\3', $text);

// Удаление [...]
echo preg_replace("/(.*?)\[.*?\]\s?(.*?)/is", '\\1\\3', $text);

// Удаление {...}
echo preg_replace("/(.*?)\{.*?\}\s?(.*?)/is", '\\1\\3', $text);

// Удаление [...]
echo preg_replace("/(.*?)<.*?>\s?(.*?)/is", '\\1\\3', $text);
2

Комментарии

Удалить комментарии из HTML

$text = '<p>Текст <!--комментарий--> текст</p>';
echo preg_replace('/\s?<!--.*-->\s?/', ' ', $text);

Результат:

<p>Текст текст</p>

Удаление многострочных комментариев «/* ... */»

$text = "
    /**
     * Описание функции и тд
     * @param name
     * @param defaultValue
     * @returns {*}
    */ 
    document.write('<p><b></b></p>');
";

echo preg_replace("/\/\*(.*?)\*\//sm", '', $text);

Результат:

document.write('<p><b></b></p>');

Удалить комментарии «//» и «#»

$text = "
// По возрастанию:
ksort($array);
# По убыванию:
krsort($array);";

$res = preg_replace("/\/\/.*\n/", '', $text);
$res = preg_replace("/#.*\n/", '', $res);
echo $res;

Результат:

ksort();
krsort();

Комментарии SQL « --...»

$text = "
SELECT 
    * 
FROM 
    `articles` 
WHERE 
    `name` LIKE '%KEY%' 
    -- OR `title` LIKE '%KEY%' 
    OR `text` LIKE '%KEY%'";

echo preg_replace("/\s--.*\n/", '', $text);

Результат:

SELECT 
    * 
FROM 
    `articles` 
WHERE 
    `name` LIKE '%KEY%' 
    OR `text` LIKE '%KEY%'
3

Нумерация строк

$text = '
1 text text text.
2 text text text.
3 text text text.

1. text text text.
2. text text text.
3. text text text.

1) text text text.
2) text text text.
3) text text text.';

echo preg_replace('/(\d)+(\.|\)|\s)+([\s]?)+(.*)/', '\\4', $text);

Результат:

text text text.
text text text.
text text text.

text text text.
text text text.
text text text.

text text text.
text text text.
text text text.
4

Хештеги

$text = 'broken beat, nu jazz, downtempo #nujazz, #downtempo, #intelligent';
echo preg_replace('/#([\S]+)/', '', $text);

Результат:

broken beat, nu jazz, downtempo   
5

HTML теги и атрибуты

Данный пример удаляет тег style

$text = '<p>Текст <style color="#fff">стиль</style> текст</p>';
echo preg_replace('/\s?<style[^>]*?>.*?<\/style>\s?/si', ' ', $text);

Результат:

<p>Текст текст</p>

По аналогии теги p, div и script:

echo preg_replace('/\s?<p[^>]*?>.*?<\/p>\s?/si', ' ', $text);
echo preg_replace('/\s?<div[^>]*?>.*?<\/div>\s?/si', ' ', $text);
echo preg_replace('/\s?<script[^>]*?>.*?<\/script>\s?/si', ' ', $text);

Удалить атрибут у тегов

$text = '<p class="text" style="margin: 0 0 0 0;" id="fid-123">текст</p>';

echo preg_replace('/\s?class=["][^"]*"\s?/i', ' ', $text);
echo preg_replace('/\s?style=["][^"]*"\s?/i', ' ', $text); 
echo preg_replace('/\s?id=["][^"]*"\s?/i', ' ', $text);

Результат:

<p style="margin: 0 0 0 0;" id="fid-123">текст</p>
<p class="text" id="fid-123">текст</p>
<p class="text" style="margin: 0 0 0 0;" >текст</p>

Удалить все атрибуты у тегов

$text = '<p style="margin: 0 0 0 0;" class="text" id="fid-123">текст</p>';
echo preg_replace("/(<[a-z]).*?(>)/i", '\\1\\2', $text);

Результат:

<p>текст</p>

Или только у определенных HTML тегов:

$text = preg_replace("/(<p).*?(>)/i", '\\1\\2', $text);
$text = preg_replace("/(<div).*?(>)/i", '\\1\\2', $text);

Удаление тегов в ячейках таблицы

Регулярные выражения удаляют теги p и div, но оставляет их содержание.

$text = '
<table>
    <tr>
        <td>text 1</td>
        <td><p>text 2</p></td>
        <td><div>text 3</div></td>
    </tr>
</table>';

// Удаление <p>
$text = preg_replace('/(<td[^>]*>)(.*)(<p[^>]*>)(.*)(<\/p>)(.*)(<\/td>)/i', '\\1\\2\\4\\6\\7', $text);

// Удаление <div>
$text = preg_replace('/(<td[^>]*>)(.*)(<div[^>]*>)(.*)(<\/div>)(.*)(<\/td>)/i', '\\1\\2\\4\\6\\7', $text);

print_r($text);

Результат:

<table>
    <tr>
        <td>text 1</td>
        <td>text 2</td>
        <td>text 3</td>
    </tr>
</table>