Php替换匹配正则表达式的字符

时间:2011-12-10 05:27:04

标签: php regex-negation

我尝试使用preg_replace方法替换匹配的正则表达式,但我收到错误消息

  

“警告:preg_replace():找不到结尾分隔符'_'”

$oldString = "";
$newString = preg_replace("/[^a-z0-9_]/ig", "", $oldString);

这里我试图删除除字母,数字和下划线以外的所有字符。

4 个答案:

答案 0 :(得分:1)

我认为php在你的尾随/后不喜欢控件g char。我也一直遇到麻烦,取消g似乎有所帮助。 preg_replace具有可选的参数,它在您希望增加的字符串之后,您可以控制您希望限制搜索的次数,默认情况下它是全局的。

The manual表示您将使用第4个参数(限制)设置限制,如果您愿意,可以传入计数参数5,这将为您提供找到匹配的次数。

对于我的钱来说,这只是另一件事,PHP做得好1/2,所有这些都加起来它只是一个完美的1/2 assed语言。但那既不在这里也不在那里:)

哦,欢迎来到Stack! :)

答案 1 :(得分:1)

PHP不支持g,删除g修饰符(全局)会这样做。
这是list of supported modifier

答案 2 :(得分:0)

首先,g没有修饰符preg_replace

$oldString = "";
$newString = preg_replace("/[^a-z0-9_]*/i", "", $oldString);

其次,尝试在字符类之后加上一个乘数,以便替换多于1个字符。

答案 3 :(得分:0)

在RegEx \W中表示任何非字母数字下划线字符。请记住,这也将取代空格。

$oldString = "This, is not _all_ alpha-numeric";
$newString = preg_replace("/\W+/", "", $oldString);
# Gives "Thisisnot_all_alphanumeric"

$newString = preg_replace("/[^\w ]+/", "", $oldString);
# Gives "This is not _all_ alphanumeric"