php - Regex with looping character or condition -


below sample correct data

hello @[reda sel](native:reda) hello @[peter k](native:123456) 

i using regex

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

to data like

@[reda sel](native:reda) @[peter k](native:123456) 

the problem is, when input data this

hello @[reda sel] hello. @[peter k](native:123456) testing hello @[reda sel](native:reda) hello @[peter k](native:123456) 

the result is

@[reda sel] hello. @[peter k](native:123456) @[reda sel](native:reda) @[peter k](native:123456) 

i need capture data expression example above. if data repeated, result not overlapping that. , result this

@[peter k](native:123456) @[reda sel](native:reda) @[peter k](native:123456) 

edited if wanted replace data using result value

hello reda sel 

should use foreach , replace one, one, or there other regex options?

thank assistance.

the main problem initial .*?, use negated character classes here instead ...

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

demo


Comments