我想捕获并替换位于一个特定字符串之前的所有字母和数字
preg_replace
。
我尝试过
(([a-z]*[^\.\-\_]*)|\d*[^\.\-\_]*)(?=(@(?:[\w-]+\.)+[\w-]{2,4}))
但它只得到最后一个匹配
你可以使用
preg_replace('/[a-zA-Z0-9](?=[^\s@]*@)/', 'a', $text)
preg_replace('/[^\W_](?=[^\s@]*@)/', 'a', $text)
请参阅 正则表达式演示。
详情
[^\W_]
/ [a-zA-Z0-9]
- 字母或数字(?=[^\s@]*@)
- 紧邻右侧,必须有零个或多个除空格和 @
之外的字符,然后是一个 @
字符。