2016-01-27 2 views
0

У меня есть некоторый текст, который нужно удалить код FRON и я, используя много вариантов, как это:ул заменить маски текста

$answer = str_replace('<td style="background-color:#80F9CC;">', '', $answer); 
$answer = str_replace('<td style="background-color:#E1E3E4;">', '', $answer); 
$answer = str_replace('<td style="background-color:#D1D3D4;">', '', $answer); 
$answer = str_replace('<td style="background-color:#73F6AB;">', '', $answer); 
$answer = str_replace('<td style="background-color:#3CEB88;">', '', $answer); 

Есть ли способ, чтобы создать одну функцию str_replace, который удалит этот текст WIA некоторой маски ?

+2

Им просто интересно о вашей конечной цели здесь .. если заменить открытие '' с пустым '«»' то вы остаетесь с тегом '' без его открывающего тега, что приведет к плохому HTML. Это действительно то, что вы хотите? – CodeGodie

ответ

5

preg_replace() - это функция, в которой вы нуждаетесь.

Предполагая, что вы хотите, чтобы определить и заменить шестигранные представления цветов, код что-то вдоль линий:

$answer = preg_replace('/<td style="background-color:#[0-9A-F]{6};">/i', '', $answer); 

i PCRE modifier говорит preg_replace игнорировать случаи характера.

Он идентифицирует и заменяет только тогда, когда цветовой код содержит ровно 6 шестнадцатеричных цифр. Чтобы определить коды цветов, используя 3-digit RGB notation, вам необходимо изменить часть [0-9A-F]{6}regexp на [0-9A-F]{3}([0-9A-F]{3})?. Или использовать более простое выражение, которое соответствует всем цветовым кодам от 3 до 6 цифр: [0-9A-F]{3,6}

Можно также положить \s* после двоеточия (:), чтобы сделать это также соответствовать, когда один или несколько пробельных символы присутствуют после background-color: части.

Обновленный код:

$answer = preg_replace(
    '/<td style="background-color:\s*#[0-9A-F]{3,6};">/i', '', $answer 
); 

Однако, если вы хотите, чтобы соответствовать только некоторые цвета, то вы можете поместить цветовые коды, разделенные | вместо:

$answer = preg_replace(
    '/<td style="background-color:\s*#(80F9CC|E1E3E4|D1D3D4|73F6AB|3CEB88);">/i', 
    '', 
    $answer 
); 

Краткое объяснение регулярного выраженные части:

<td style="background-color: # plain text, matches if exact 
\s*        # matches zero or more (*) space characters (\s) 
#        # plain text, matches exactly one '#' 
(        # start of a group, doesn't match anything 
    80F9CC       # matches '80F9CC' 
    |E1E3E4       # or (|) 'E1E3E4' 
    |D1D3D4       # or 'D1D3D4' 
    |73F6AB       # or ... 
    |3CEB88       # or ... 
)        # end of the group  
;">        # plain text; matches exactly this text 
+0

Спасибо! Идеальное решение :) –

+0

Соответствует ли это конкретным цветам? или все цвета с 6/3 цифрами? – CodeGodie

+0

Он соответствует всем цветам. – axiac

3

str_replace() ca п принять массив в качестве аргумента:

$replace_array = [ 
    '<td style="background-color:#80F9CC;">', 
    '<td style="background-color:#E1E3E4;">', 
    '<td style="background-color:#73F6AB;">', 
    '<td style="background-color:#3CEB88;">', 
]; 

$answer = str_replace($replace_array, '', $answer); 

или вы могли бы использовать preg_replace() вместо

Смежные вопросы