我知道这已经死了。我已经找到了很多关于这个主题的话题,并听取了很多建议。但是,如果我有以下字符串:
@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/