正则表达式不是强点。 我可以做一些简单的事情,但这个只是我的山羊! 那么有人可以帮我一把。
以下是代码中的注释:
//如果utf8检测之前没有工作,请删除下划线的那些奇怪的字符,作为最后的手段。
eregi_replace("[^a-z0-9 \-\.\(\)\/\\]","_",$str);
到(这是我试过的)
preg_replace("{[^a-z0-9 \-\.\(\)\/\\]}i","_",$str);
那些帮我一把的正则表达式专业人士?
答案 0 :(得分:1)
您需要指定正则表达式标识符,例如#
或/
preg_replace("#[^a-z0-9 \-\.\(\)\/\\]#i","_",$str);
因此,您应该将正则表达式括在这些标识符字符中。
答案 1 :(得分:1)
首先,我相信{
和}
可以作为来自旗帜的表达式的分隔符,但我知道有一些不支持它的正则表达式,所以它可能是一个使用!
或#
其次,我不确定该表达式之前是如何工作的,因为AFAIK使用\
字符转义不适用于ERE表达式。您必须根据他们在班级中的位置来表示^
,-
和]
等特殊字符(^
不能是第一个字符,]
必须是第一个字符,-
必须是第一个或最后一个字符。第一个表达式中的-
字符将被解释为范围说明符(在本例中为\
和\
之间范围内的字符)。此外,\
字符按字面意思处理,因此您看起来很混乱,而且大部分是冗余的正则表达式。
然而,替换表达式需要使用preg符号/ flavor,因此有规则更改:
\
字符需要转义两次 - 一次用于字符串,然后又一次用于正则表达式 - 否则,它将转义结束括号]
所以,这里有一些code (link),我相信你需要做的事情:
$source = 'hello! @#$%^&* wazzup-dawg?.()/\\[]{}<>:"';
$blah = preg_replace('![^a-z0-9 .()/\\\\-]!i','_',$source);
print($blah);
答案 2 :(得分:0)
的preg_replace( “{[^一个-Z0-9] - ()/ \ /} I”, “_”,$ STR)
工作正常。
我尝试了所有#和/和{并且他们都工作了。