Php 将字符串与最后一部分匹配不同

Php 将字符串与最后一部分匹配不同,php,regex,Php,Regex,我有以下正则表达式: /{{trans-template-id:(\d)+}}/i 它与{{trans-template-id:7}}完美匹配 但是,我想修改它,使其也与{{trans-template hash:asdf1234}}匹配。我将如何修改它 我已经走了这么远,但我对正则表达式还不够了解,似乎: /{{trans-template-(id:(\d)+|hash:[a-zA-Z0-9]+)}}/i 如果要创建公共组,可以使用 {{trans-template-(id|hash):(

我有以下正则表达式:

/{{trans-template-id:(\d)+}}/i
它与
{{trans-template-id:7}}
完美匹配

但是,我想修改它,使其也与
{{trans-template hash:asdf1234}}
匹配。我将如何修改它

我已经走了这么远,但我对正则表达式还不够了解,似乎:

/{{trans-template-(id:(\d)+|hash:[a-zA-Z0-9]+)}}/i

如果要创建公共组,可以使用

{{trans-template-(id|hash):((?<=id:)\d+|(?<=hash:)\w+)}}

问题出在哪里
/{{trans-template-(id:(\d)+hash:[a-zA-Z0-9]+}/i
应该根据它不匹配来工作啊,这是因为我没有
g
(全局)标志
trans-template id:
后面必须跟一个
整数
。第一个不会让
string
值通过吗?链接工作得很好。我不知道你是否想把它作为answer@Albert我添加了另一个。这会更好,因为它不会有任何空的捕获组。您应该使用分支重置功能
(?|…(…)…|…(…)
(每个分支的捕获组都有相同的编号)@casimirithippolyte真是太神奇了..我有很多东西要读..我知道这份工作会有一些东西..谢谢
{{trans-template-(?|id:(\d+)|hash:(\w+))}}