这是我的表达:^[a-z][a-z0-9_]+[a-z0-9]$
现在它与任何东西都不匹配。如何使其与ems_agencies
匹配,而不是ems_agencies_
?
答案 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
不区分大小写