我想使用preg_replace删除alt属性。这是alt属性
的模式alt="Screen Shot 2015-06-09 at 11.37.40 AM"
或者可能是这样的
alt="The Postmates sign outside the office"
引号内可以有任何字符。我正在使用以下表达式:
$html = preg_replace('/alt="\w+\s\w+"/', '><br>', $html);
但它只替换了类型的alt属性:
alt="The Postmates"
这里适当的表达方式是什么?
答案 0 :(得分:2)
class function UTIL.ProcessString(const S: string): string;
var
SB: TStringBuilder;
P: PChar;
Ch: Char;
begin
Result := '';
P := PChar(S);
if P^ = #0 then Exit;
SB := TStringBuilder.Create;
try
repeat
Ch := P^;
Inc(P);
if Ch <> '\' then
SB.Append(Ch)
else
begin
Ch := P^;
if Ch = #0 then
begin
// up to you if you really need this or not:
// SB.Append(sLineBreak);
Break;
end;
Inc(P);
case Ch of
'\','"': SB.Append(Ch);
'n': SB.Append(sLineBreak);
't': SB.Append(#9);
else SB.Append('\'+Ch);
end;
end;
until P^ = #0;
Result := SB.ToString;
finally
SB.Free;
end;
end;
应该这样做。
.*?
这将使用$html = preg_replace('/alt=".*?"/', '<br>', $html);
替换alt
属性及其内容中的所有内容。
旁注<br>
元素中的<br>
如果你正在做的事情没有多大意义......或者因为你有img
可能你试图关闭><br>
? img
始终是最后一个属性吗?
alt
说找到任何东西,直到第一个“这个字符”,在这种情况下是双引号....更多细节......
.*?
=任何角色
.
=前一个字符出现0次或更多次(如果您想要至少出现一次,则替换为*
)
+
=使?
懒惰,意味着在第一次出现时停止,而不是最后一次出现
测试正则表达式的地方。 http://regex101.com,http://www.phpliveregex.com/
学习正则表达式的地方,http://www.rexegg.com/,http://www.regular-expressions.info/以及许多其他网站。
这是一个测试,您可以看到此正则表达式与http://www.phpliveregex.com/p/bvn一起使用。
根据您的更新:
*
$html = preg_replace('/alt=".*?"\s*/\?s*>/', '><br>', $html);
是为了逃避正斜杠,因为正斜杠是你的分隔符。正斜杠后的/\
是因为它是可选的。 ?
是零或更多的空格。那些可以在可选的前向斜线的两侧,这就是为什么我们都有这两个斜杠。
答案 1 :(得分:0)
我不确定PHP中的regexp有何不同,但试试这个:
$html = preg_replace('~alt\s*=\s*"([^"]*)"~', '><br>', $html);
一开始我们有 alt 这是一个纯文本
然后 \ s * 表示&#34;零个或多个空格&#34;。这样做是为了处理像alt = "something"
这样的代码
= 代表一个简单的等号
再次 \ s *
([^&#34;] *)表示&#34;除引号外的任何符号。