str替换为掩码文本

Sit*_*ker 0 php string str-replace

我有一些文本,我需要删除前面的代码,我使用这样的很多变种:

$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);
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个str_replace函数,将通过一些掩码删除此文本?

axi*_*iac 7

preg_replace() 是你需要的功能.

假设您要识别并替换颜色的十六进制表示,代码就是这样的:

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

iPCRE修饰符告诉preg_replace忽略字符大小写.

仅当颜色代码包含正好6个十六进制数字时,它才会识别并替换.为了使其识别使用颜色代码3位数字RGB符号,你需要改变[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
);
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想匹配某些颜色,则可以将颜色代码分开|:

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

正则表达式片段的简短说明:

<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
Run Code Online (Sandbox Code Playgroud)