除某些条件外,正则表达式等于条件

时间:2011-01-25 21:26:19

标签: php regex

我在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.

关于如何做到这一点的任何想法?

2 个答案:

答案 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。 让你的回调决定是否替换。

如果要求对于简单的正则表达式来说太复杂,它可以提供更大的灵活性。