【发布时间】:2010-10-03 10:19:21
【问题描述】:
我有一些文本,我想从中删除所有不属于以下内容的字符。
desired_characters =
0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n
最后一个是我想要保留的\n(换行符)。
【问题讨论】:
我有一些文本,我想从中删除所有不属于以下内容的字符。
desired_characters =
0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n
最后一个是我想要保留的\n(换行符)。
【问题讨论】:
要匹配除所列字符之外的所有字符,请使用inverted character set [^…]:
$chars = "0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n";
$pattern = "/[^".preg_quote($chars, "/")."]/";
这里preg_quote 用于转义某些特殊字符,以便将它们解释为文字字符。
您还可以使用字符范围来表示列出的字符:
$pattern = "/[^0-9!&',-.\\/a-z\n]/";
在这种情况下,,-. 中的文字 - 是否被转义并不重要。因为,-. 被解释为从, (0x2C) 到. (0x2E) 之间已经包含- (0x2D) 的字符范围。
然后你可以删除那些与preg_replace匹配的字符:
$output = preg_replace($pattern, "", $str);
【讨论】:
$string = 'This is anexample $tring! :)';
$string = preg_replace('/[^0-9!&\',\-.\/a-z\n]/', '', $string);
echo $string; // hisisanexampletring!
^ 这是区分大小写的,因此从字符串中删除了大写 T。要同时允许大写字母,$string = preg_replace('/[^0-9!&\',\-.\/A-Za-z\n]/', '', $string)
【讨论】:
[-](仅-)、[a-b-c](a–b、-、@ 987654329@)或[\d-.](\d、-、.)。