我一直在提到http://www.regular-expressions.info/reference.html,但是我只是不明白为什么我的regex无法成功。
function is_name($Argv){
$RegExp='/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/';
return preg_match($RegExp,$Argv)?$Argv:false;
}我正在努力使名字字母表开始,可选的一些符号或空格在中间和')‘在末尾可用。
$testArray=array('L','D Luffy','Luffy','Monkey D. Luffy','Choppa(fiftyB)');
foreach($testArray as $key=>$value)
echo $auth->check->is_name($value); //output 'LLuffy'结果只有'L‘和'Luffy’可接受,但不是匹配的中间空间,这是可选的。我不能选择中间的选项,因为我必须匹配'L‘。
更新
问题解决了,这是我正在尝试做[]?的问题,但是(我认为) php匹配的?+在做[]?之前
function is_name($Argv){
$RegExp='/^[a-zA-Z]+([a-zA-Z()\. ]?)+([a-zA-Z)]?)+$/';
return preg_match($RegExp,$Argv)?$Argv:false;
}发布于 2013-08-27 02:50:58
表达方式不对,
/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/您的意思是:字符串的开头后面是字母(无论如何)一次或多次,然后是(可选的字母括号点或空格)一次或多次,然后是(可选的字母或括号)一次或多次,然后是字符串的结尾。
不太确定它是怎么得到LLuffy的,但?+只是.毫无意义,用你想要匹配的内容进行评论或编辑,我会告诉你的。
发布于 2014-08-25 12:21:38
问题解决了,这是我正在尝试做
[]?的问题,但是(我认为) php匹配的?+在做[]?之前
是的,因为PHP文档说
重复是由量词指定的,这些量词可以跟随下列任何一项:
+作为量词不能跟随重复[...]?,因为这不是上面的任何一项。相反(正如HamZa正确地指出),?+是根据以下内容来解释的:
后接+的量词是“所有格”。他们吃尽可能多的字符,不回来,以匹配其余的模式。
因此,对于模式/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/和主题D Luffy,[a-zA-Z]+匹配D,[a-zA-Z()\. ]?+匹配空间,[a-zA-Z)]?+只匹配L,而不是整个Luffy。
https://stackoverflow.com/questions/18455946
复制相似问题