我一直指的是http://www.regular-expressions.info/reference.html,但我无法理解我的正则表达式无法取得成功。
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;
}
答案 0 :(得分:0)
表达方式是对的,
/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/
你说的是: 字符串开头后跟一个字母(任何一个案例)一次或多次,然后是(可选的字母括号点或空格)一次或多次,然后是(可选的字母或括号)一次或多次,然后结束字符串。
不太确定如何获得LLuffy,但是?+只是......毫无意义,回复或编辑你想要匹配的东西,我会告诉你。
答案 1 :(得分:0)
问题解决了,但是我试图做
之前匹配[]?
的问题(我 认为)在?+
[]?
的php
是的,因为PHP documentation说
重复由量词指定,它可以跟随任何一个 以下项目:
- 单个字符,可能已转义
- 。元字符
- 一个角色类
- 后退参考(参见下一节)
- 带括号的子模式(除非是断言 - 见下文)
+
作为量词无法遵循重复[...]?
,因为这不是上述任何内容。而是(正如HamZa正确陈述的那样)?+
根据这个来解释:
量词跟随+是“占有欲”。他们吃多少 字符尽可能不返回以匹配其余部分 图案。
因此,使用模式/^[a-zA-Z]+[a-zA-Z()\. ]?+[a-zA-Z)]?+$/
和主题D Luffy
,[a-zA-Z]+
匹配D
,[a-zA-Z()\. ]?+
匹配空格,[a-zA-Z)]?+
匹配只是L
,而不是整个Luffy
。