我是Perl的新手,对于正则表达式更是如此。 一直试图匹配以下内容,但没有成功:
M
)和1,2,3
中的数字有效字符串的示例是abc
,还有DEFG M2
。无效的格式为mem M
,例如
到目前为止我所拥有的是:
$myExpr ~= m/^[a-z,A-z]{3,4}M[1,2,3]$/i
不确定如何使M
和数字可选
答案 0 :(得分:1)
使用(?:)
对可选符号进行分组,并使用"零或一个"量词?
。
$myExpr =~ m/^[a-zA-Z]{3,4}(?: M[123])?$/
我还修复了你的正则表达式中的错误:你没有在角色类中使用,
- 这已经意味着"匹配,",已修复A-Z
范围并删除了/i
修饰符,因为您没有说明是否需要小写字母M且第一个范围已涵盖小字母和大字母。
答案 1 :(得分:1)
您可以使用以下正则表达式。您不需要在字符类[]
中使用逗号。同时删除i
,因为您需要与M
匹配。
$myExpr ~= m/^[a-zA-z]{3,4}(?: M[123])?$/
如果您认为自己的空间是可选的,那么请再次在该空格后添加?
(即(?: ?M[123])
)。
答案 2 :(得分:1)
为什么不为它尝试以下正则表达式:
$myExpr =~ m/^([a-zA-Z]{3,4})(\s|)(M|)([1-3]|)$/;
([a-zA-Z]{3,4})
- 此类中任何字符的组:[a-zA-Z],重复3到4次。(\s|)
- 会有空格(空格)或不是。(M|)
- 要么大写 M要么。([1-3]|)
- 此类别的任何章程: [1-3]
或不。 (或)尝试以下
我个人推荐这个
$myExpr =~ m/^([a-zA-Z]{3,4})(\s{0,1})(M{0,1})([1-3]{0,1})$/;
([a-zA-Z]{3,4})
- 此类中任何字符的组:[a-zA-Z]
,重复3到4次,即最少3个字符,最多4个字符。(\s{0,1})
- 重复0到1次的\s
组,即可选。(M{0,1})
- 字符组 M
,重复次数为0到1,即可选。([1-3]{0,1})
- 任意数字 from 1 to 3
的组,重复次数为0到1,即可选。