2012-08-08 73 views
3

我正在尝试一个简单的正则表达式对PHP中的字符串。我努力的正则表达式是PHP:正则表达式 - 未知修饰符错误

[A-Za-z0-9\-_]* 

如何以往当我使用它在PHP中,我得到一个错误说:

Warning: preg_match(): Unknown modifier '*' in "C:/apache/....." on line 2 

这里是我的代码:

<?php 
if(preg_match("[A-Za-z0-9\-_]*",'vidhu_1911')){ 
    echo "it matched!"; 
}else{ 
    echo "fail to match"; 
} 
?> 

你可以告诉我我做错了?

感谢, Vidhu

回答

8

你需要在你的正则表达式

<?php 
if(preg_match("/[A-Za-z0-9\-_]*/",'vidhu_1911')){ 
    echo "it matched!"; 
}else{ 
    echo "fail to match"; 
} 
?> 

正则表达式的分隔符在代码中的方括号已解释为正则表达式分隔符,关闭分隔符后面的字符是正则表达式的修饰符。所以*被视为修饰符,但它不是一个有效的修饰符。

欲了解更多详情,请参阅Delimiters on php.net

+0

好的,我做到了。但它不起作用。这一次它没有给出错误,但它似乎几乎匹配我放入的每一个字符串。就像它不应该匹配“vidhu 1911”,因为它有一个空间。但它的确如此。任何想法为什么? – Krimson 2012-08-08 11:42:53

+2

这是一个不同的问题。我能告诉你什么吗?它几乎不会匹配每个字符串,它会匹配每个字符串。如果你只想匹配那些只包含这些字符**的字符串,你需要将你的正则表达式锚定到字符串开始和结尾'/^[A-Za-z0-9 \ -_] * $ /'。否则,它会匹配任何子字符串并说:“是的,我找到了一封信!”。请注意,它也会匹配空字符串!因为你使用了'*',如果你不想要这个,使用量词'+'来匹配至少一个字符。 – stema 2012-08-08 12:00:56

2

您必须在其斜线正则表达式:

<?php 
if(preg_match("/[A-Za-z0-9\-_]*/",'vidhu_1911')){ 
    echo "it matched!"; 
}else{ 
    echo "fail to match"; 
} 
?> 
相关问题