gpt4 book ai didi

java - 为什么这个正则表达式会捕获排除的字符?

转载 作者:行者123 更新时间:2023-12-02 05:38:01 25 4
gpt4 key购买 nike

我有一个像这样的正则表达式:

(?:(\\s| |\\A|^))(?:@)[A-Za-z0-9]{2,}

我想要做的是找到一个以@开头并且后面有两个或更多字符的模式,但是它不能从单词的中间开始。

我是正则表达式的新手,但印象中 ?: 匹配但随后排除该字符,但是我的正则表达式似乎匹配但包含该字符。理想情况下,我希望“@test”返回“test”,而“test@test”根本不匹配。

谁能告诉我我做错了什么?

谢谢。

最佳答案

你的理解是错误的。 (...)(?:...) 之间的区别仅在于前者还创建一个编号匹配组,可以通过反向引用来引用该匹配组在正则表达式中,或作为从匹配后的代码中捕获的匹配组。

您可以更改代码以使用lookbehinds,但简单直接的解决方法是将 ([A-Za-z0-9]{2,}) 放在常规括号内,就像我一样在这里完成,并检索第一个匹配的组。 (在这种情况下,@ 不需要任何括号,但您拥有的括号是无害的。)

关于java - 为什么这个正则表达式会捕获排除的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com