正则表达式 :捕获特定字符串之前的所有字母和数字

Regexp : catching all letters and numbers before a specific string

提问人:Delphine 提问时间:11/17/2023 最后编辑:user3783243Delphine 更新时间:11/17/2023 访问量:38

问:

为了替换,我想捕获一个特定字符串之前的所有字母和数字。preg_replace

示例:[email protected] 结果:[email protected]

我试过了,但它只得到最后一个匹配项(([a-z]*[^\.\-\_]*)|\d*[^\.\-\_]*)(?=(@(?:[\w-]+\.)+[\w-]{2,4}))

Matching with current regexp

正则表达式 PCRE

评论

1赞 Wiktor Stribiżew 11/17/2023
preg_replace('/[a-zA-Z0-9](?=[^\s@]*@)/', 'a', $text)preg_replace('/[^\W_](?=[^\s@]*@)/', 'a', $text)
1赞 Nigel Ren 11/17/2023
你是否想实现 stackoverflow.com/questions/20545301/...
0赞 Delphine 11/17/2023
@Viktor谢谢!将其作为答案发布,让我验证
1赞 Delphine 11/17/2023
@NigelRen 不是真的,因为就我而言,电子邮件可能不是正确的电子邮件,但谢谢

答:

1赞 Wiktor Stribiżew 11/17/2023 #1

你可以使用

preg_replace('/[a-zA-Z0-9](?=[^\s@]*@)/', 'a', $text)
preg_replace('/[^\W_](?=[^\s@]*@)/', 'a', $text)

请参阅正则表达式演示

  • [^\W_] / [a-zA-Z0-9]- 字母或数字
  • (?=[^\s@]*@)- 紧挨着右边,除了空格之外,必须有零个或多个字符,然后是一个字符。@@