preg_replace麻烦

时间:2011-03-06 16:05:26

标签: php

我试图仅使用以下内容在文本中留下a-zA-Z0-9._:

$new_pgname=preg_replace('|(^[a-zA-Z0-9_\.])|s','',$new_pgname);

但猜猜是什么......对,它不起作用!任何帮助PLZ?

谢谢。

6 个答案:

答案 0 :(得分:4)

试试这个:

$new_pgname=preg_replace('%[^a-z0-9._]%i', '', $new_pgname);

这将保留大写和小写字符

答案 1 :(得分:3)

您应该做什么 - 替换一个或多个非a-z A-Z 0-9 _ or .的字符。因此,您需要使用以下表达式:[^a-zA-Z0-9_\.]+

这意味着什么:

[] - 定义一个字符类

^ - 不是这些字符

+ - 一个或多个

代码:

$new_pgname = "(*_&HF&)*FH)FE*H)_#(*#F(*&HEF&HF*&By7bv07f87asFB087aFgbh08aj9smf,f.,efw3.g3454-w54w.34.tw\43t4/.g34/g34g/3g434h8j)*7bh*&)Fg803723r6y";
echo $new_pgname . '<br />';
$new_pgname = preg_replace ('/[^a-zA-Z0-9_\.]+/', '', $new_pgname);
echo $new_pgname . '<br />';

输出:

(*_&HF&)*FH)FE*H)_#(*#F(*&HEF&HF*&By7bv07f87asFB087aFgbh08aj9smf,f.,efw3.g3454-w54w.34.tw#t4/.g34/g34g/3g434h8j)*7bh*&)Fg803723r6y<br />
_HFFHFEH_FHEFHFBy7bv07f87asFB087aFgbh08aj9smff.efw3.g3454w54w.34.twt4.g34g34g3g434h8j7bhFg803723r6y<br />

答案 2 :(得分:1)

你不需要在交替中删除点(。)

答案 3 :(得分:0)

你需要把carat / in / side放在支架上

答案 4 :(得分:0)

你所拥有的只会尝试匹配字符串开头的字符...插入符号(^)进入字符组内部以使其无效。

$new_pgname=preg_replace('|([^a-zA-Z0-9_\.])|s','',$new_pgname);

答案 5 :(得分:0)

看起来你正在尝试使用否定的字符范围。为此,您需要将插入符号(^)放在方括号内,作为集合的第一个字符,即:

[^ A-ZA-Z0-9 _]