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函数,将通过一些掩码删除此文本?
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)