去除非';t a-zA-Z0-9,uu和-from PHP字符串
我想停止与此正则表达式模式不匹配的所有字符:去除非';t a-zA-Z0-9,uu和-from PHP字符串,php,regex,preg-replace,Php,Regex,Preg Replace,我想停止与此正则表达式模式不匹配的所有字符:[a-zA-Z0-9_-] 通常我会这样做: preg_replace("[a-zA-Z0-9_-]", "", $var); 但很明显,这对我想要的东西有着不利的影响。正则表达式中是否有非正则表达式?我怎样才能让它去掉任何与模式不匹配的字符 谢谢。[^a-zA-Z0-9.-]应该为您做这件事。注意括号内的^。字符前面的^character如何: preg_replace( '[^a-zA-Z0-9_-]", "", $var); 在正则表达式的r
[a-zA-Z0-9_-]
通常我会这样做:
preg_replace("[a-zA-Z0-9_-]", "", $var);
但很明显,这对我想要的东西有着不利的影响。正则表达式中是否有非正则表达式?我怎样才能让它去掉任何与模式不匹配的字符
谢谢。
[^a-zA-Z0-9.-]
应该为您做这件事。注意括号内的^
。字符前面的^character如何:
preg_replace( '[^a-zA-Z0-9_-]", "", $var);
在正则表达式的range元素中,如果第一个字符是
^
,则它会反转范围(因此[^a-zA-Z0-9.-]
匹配任何非字母数字、下划线或破折号的字符)
大多数类型的正则表达式都是这样的这是:
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