我想停止所有与这个正则表达式模式不匹配的字符:[a-zA-Z0-9_-]。
通常我会这样做:
preg_replace("[a-zA-Z0-9_-]", "", $var);但很明显,这对我想要的东西有相反的效果。正则表达式中是否存在NOT?我怎样才能去掉与模式不匹配的字符呢?
谢谢。
发布于 2011-02-16 09:46:15
这一点:
preg_replace("[a-zA-Z0-9_-]", "", $var);甚至不会替换这些字符,除非输入的字符串与模式完全相同。通过使用[]作为分隔符,它们与表达式本身中的分隔符的效果不同。您可以更改分隔符(例如:/),或者在模式中添加更多的括号:
preg_replace("/[a-zA-Z0-9_-]/", "", $var); // this works
preg_replace("[[a-zA-Z0-9_-]]", "", $var); // this too现在,要在[]中否定模式,您可以在开头使用^:
preg_replace("/[^a-zA-Z0-9_-]/", "", $var);您还可以使用不敏感修饰符i来匹配小写(a-z)和大写(A-Z):
preg_replace("/[^a-z0-9_-]/i", "", $var); // same as above发布于 2011-02-16 09:39:35
[^a-zA-Z0-9_-]应该为你做这件事。请注意括号内的^。
发布于 2011-02-16 09:40:46
在字符前面加一个^字符如何:
preg_replace( '[^a-zA-Z0-9_-]", "", $var);https://stackoverflow.com/questions/5011640
复制相似问题