我在PHP中编写了以下Regex,以便在preg_replace()中使用。
/\b\S*(.com|.net|.us|.biz|.org|.info|.xxx|.mx|.ca|.fr|.in|.cn|.hk|.ng|.pr|.ph|.tv|.ru|.ly|.de|.my|.ir)\S*\b/i
这个正则表达式从目前为止非常有效地删除了字符串中的所有URL(尽管我确信我可以编写更好的URL)。我需要能够从特定域添加排除。所以伪代码看起来像这样:
IF string contains: .com or .net or. biz etc... and does not contain: foo.com THEN execute condition.
关于如何做到这一点的任何想法?
答案 0 :(得分:3)
只需添加negative lookahead assertion:
/(?<=\s|^)(?!\S*foo\.com)\S*\.(com|net|us|biz|org|info|xxx|mx|ca|fr|in|cn|hk|ng|pr|ph|tv|ru|ly|de|my|ir)\S*\b/im
另外,请记住,你需要逃离点 - 并且你可以将它移到交替之外,因为每个替代品都以点开头。
答案 1 :(得分:1)
请改用preg_replace_callback。 让你的回调决定是否替换。
如果要求对于简单的正则表达式来说太复杂,它可以提供更大的灵活性。