我有正则表达式,它正在删除字符串中的所有网址,但我想更改此内容并为我的网站链接添加例外。
$url = 'This is url for example to remove www.somewbsite.com but i want to skip removing this url www.mywebsite.com';
$no_url = preg_replace("/(https|http|ftp)\:\/\/|([a-z0-9A-Z]+\.[a-z0-9A-Z]+\.[a-zA-Z]{2,4})|([a-z0-9A-Z]+\.[a-zA-Z]{2,4})|\?([a-zA-Z0-9]+[\&\=\#a-z]+)/i", "★", $url);
答案 0 :(得分:0)
首先,由于您要使用硬编码符号替换,并且使用不区分大小写的修饰符,因此可以将正则表达式简化为
'~(?:https?|ftp)://|(?:[a-z0-9]+\.)?[a-z0-9]+\.[a-z]{2,4}|\?[a-z0-9]+[&=#a-z]+~i'
无论匹配意味着什么。请注意,此处的两个备选方案过于相似([a-z0-9A-Z]+\.[a-z0-9A-Z]+\.[a-zA-Z]{2,4})|([a-z0-9A-Z]+\.[a-zA-Z]{2,4}
),它们在可选的非捕获组((?:[a-z0-9]+\.)?
)的帮助下合并为1。
现在,如果您想避免匹配特定模式,可以使用SKIP-FAIL technique:匹配您想要保留的内容并跳过它。
'~www\.mywebsite\.com(*SKIP)(*FAIL)|(?:https?|ftp)://|(?:[a-z0-9]+\.)?[a-z0-9]+\.[a-z]{2,4}|\?[a-z0-9]+[&=#a-z]+~i'
请参阅this regex demo。