正则表达式:如何在第一个单词后动态获取单词,而不是在' _'分开的字符串

时间:2012-09-19 16:42:04

标签: regex preg-match

在php中处理迁移类 如果我有这样的字符串:

create_users_roles_table

我希望正确地得到第一个和最后一个单词之间的单词,如果中间只有一个单词,那么能够正确理解单词:

create_users_table

我该怎么做?

我做完了:

(\B)_([a-zA-Z]+)_?([a-zA-Z]+)_table

当我执行 create_users_roles_table 时,它可以正常工作 并产生用户角色 但是当只执行 create_users_table 时,它会生成用户 s
显然我需要它只生成用户

任何?

1 个答案:

答案 0 :(得分:0)

我认为应该阅读

(\B)_([a-zA-Z]+)_?([a-zA-Z]+)?_table

但如果中间有三个单词,这将无效。我建议剥离这些单词,然后将它们分开,因为我不认为正则表达式可以处理可变数量的捕获组。

如果你能确定可以有多少单词,你可以随时对其进行硬编码。对于树或更少的单词,您可以使用

(\B)_([a-zA-Z]+)(?:_([a-zA-Z]+))?(?:_([a-zA-Z]+))?_table