我知道这已经死了。我已经找到了很多关于这个主题的话题,并听取了很多建议。但是,如果我有以下字符串:

@testaccount
<a href="http://twitter.com/testaccount">@testaccount</a>

显然,我不想将第二个转换为链接,因为它已经是一个。我设法找到了第一个而不是电子邮件(感谢这里已经有几个问题)。

这是我已经得到的模式:
/(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9_]+)/

这将完美地转换第一个,但第二个显然将成为“双链接”。

所以我设法确定我应该使用类似 (?!<\/a>) 的东西。但是,这只会删除 t 的最后一个 testaccount

本质上,我需要找到一种方法来忽略整个匹配项,而不仅仅是删除一个字符。这可能吗?

我使用的语言是 PHP。

谢谢

最佳答案

您需要在 .*? 之前添加 <\/a> 在负前瞻中。这样它就不会匹配已经 anchor 定的 @ 字符串。

(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z0-9_]+)(?!.*?<\/a>)

DEMO

关于php - 仅当还没有链接时 Twitter 正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26532658/

10-14 05:31