首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg匹配名不是preg_matching

preg匹配名不是preg_matching
EN

Stack Overflow用户
提问于 2013-08-27 02:20:46
回答 2查看 117关注 0票数 0

我一直在提到http://www.regular-expressions.info/reference.html,但是我只是不明白为什么我的regex无法成功。

代码语言:javascript
复制
function is_name($Argv){
    $RegExp='/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/';
    return preg_match($RegExp,$Argv)?$Argv:false;
}

我正在努力使名字字母表开始,可选的一些符号或空格在中间和')‘在末尾可用。

代码语言:javascript
复制
$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匹配的?+在做[]?之前

代码语言:javascript
复制
function is_name($Argv){
    $RegExp='/^[a-zA-Z]+([a-zA-Z()\. ]?)+([a-zA-Z)]?)+$/';
    return preg_match($RegExp,$Argv)?$Argv:false;
}
EN

回答 2

Stack Overflow用户

发布于 2013-08-27 02:50:58

表达方式不对,

代码语言:javascript
复制
/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/

您的意思是:字符串的开头后面是字母(无论如何)一次或多次,然后是(可选的字母括号点或空格)一次或多次,然后是(可选的字母或括号)一次或多次,然后是字符串的结尾。

不太确定它是怎么得到LLuffy的,但?+只是.毫无意义,用你想要匹配的内容进行评论或编辑,我会告诉你的。

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18455946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档