2

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

现在它什么都不匹配。我如何使它匹配ems_agencies但不匹配ems_agencies_

4

3 回答 3

3

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

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

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

于 2012-09-13T11:18:54.643 回答
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
于 2012-09-15T23:09:18.880 回答
-1

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

供将来参考:[0-9]与 相同\d[a-z0-9_]等于\w。请记住,虽然这\w不区分大小写的

于 2012-09-13T11:10:28.533 回答