具有小写字母的开头的正则表达式,具有小写字母或数字和中间的结尾是小写字母,数字和下划线

时间:2012-09-13 11:01:56

标签: regex

这是我的表达:^[a-z][a-z0-9_]+[a-z0-9]$

现在它与任何东西都不匹配。如何使其与ems_agencies匹配,而不是ems_agencies_

3 个答案:

答案 0 :(得分:3)

如果它“与任何东西都不匹配”,那么你可能正在使用错误的正则表达方言。 +是ERE的一个元素,在BRE中不起作用。例如,如果您使用grep命令,则需要将其作为egrep运行,或使用-E选项。

[ghoti@pc ~]$ printf 'ems_agencies\nems_agencies_\n' | egrep '^[a-z][a-z0-9_]+[a-z0-9]$'
ems_agencies
[ghoti@pc ~]$ printf 'ems_agencies\nems_agencies_\n' | grep '^[a-z][a-z0-9_]+[a-z0-9]$'
[ghoti@pc ~]$ 

如果您告诉我们您使用此正则表达式的环境,可能会缩小答案范围。

答案 1 :(得分:0)

在某些情况下,可能会将ERE转换为BRE。例如,您可以编写[a-z0-9]+而不是编写[a-z0-9][a-z0-9]*。这将在所有正则表达式实现中普遍起作用,但会牺牲可读性。

printf "ems_agencies\nems_agencies_\n" | grep '^[a-z][a-z0-9_][a-z0-9_]*[a-z0-9]$'
ems_agencies

答案 2 :(得分:-1)

你的表情很好。见这里:http://regex101.com/r/gM1zM2

供将来参考:[0-9]\d相同,[a-z0-9_]等于\w。请注意,\w 不区分大小写