具有循环字符或条件的正则表达式

时间:2015-07-20 19:10:07

标签: php regex

以下示例正确数据

Hello @[Reda Sel](Native:reda) Hello @[Peter K](Native:123456)

我使用这个正则表达式

(\@\[.*?])(\(.*?:.*?\))

获取数据

@[Reda Sel](Native:reda)
@[Peter K](Native:123456)
问题是,当输入数据类似这样的时候

Hello @[Reda Sel] Hello. @[Peter K](Native:123456) Testing
Hello @[Reda Sel](Native:reda) Hello @[Peter K](Native:123456)

结果是

@[Reda Sel] Hello. @[Peter K](Native:123456)
@[Reda Sel](Native:reda)
@[Peter K](Native:123456)

我需要使用某些表达式捕获数据,如上例所示。 但是如果重复数据,结果就不会像那样重叠。 结果就像这样

@[Peter K](Native:123456)
@[Reda Sel](Native:reda)
@[Peter K](Native:123456)

如果我想使用像

这样的结果值替换数据,请编辑
Hello Reda Sel

我应该使用foreach并逐个替换它,还是有其他正则表达式选项?

感谢您的协助。

1 个答案:

答案 0 :(得分:3)

主要问题是初始.*?,我会在这里使用否定的字符类......

(@\[[^]]*])(\([^:]*:[^)]*\))

Demo