该表达式/[^a-z0-9-]+/i
将匹配(并随后用空格替换)除az 和 0-9 之外的任何字符。^
in [^...]
表示否定其中包含的字符集。
[^a-z0-9]
匹配任何非字母数字字符
+
指上述一项或多项
/i
使其不区分大小写匹配
表达式/\&#?[a-z0-9]{2,4}\;/
匹配 a&
后接可选#
, 后接两到四个字母和数字,以 a 结尾;
这将匹配 HTML 实体,如
or'
&#?
匹配&
或&#
匹配?
前面的#
可选 The&
实际上不需要转义。
[a-z0-9]{2,4}
匹配两到四个字母数字字符
;
是文字分号。它实际上不需要转义。
部分正如您所怀疑的那样,最后一个将替换任何标签,如<tagname>
or<tagname attr='value'>
或</tagname>
用空白空间。请注意,它匹配整个标签,而不仅仅是<>
.
<
是文字字符
[^>]+
是每个字符直到但不包括下一个>
>
是文字字符
我真的建议将其重写为三个单独的调用preg_replace()
而不是嵌套它们。
// Strips tags.
// Would be better done with strip_tags()!!
$texts = preg_replace('/<[^>]+>/', ' ', $texts);
// Removes HTML entities
$texts = preg_replace('/&#?[a-z0-9]{2,4};/', ' ', $texts);
// Removes remainin non-alphanumerics
$texts = preg_replace('/[^a-z0-9-]+/i', ' ', $texts);
$array = explode(' ', $texts);