2012-01-30 60 views
1

我正在寻找一种方式写在只有一个preg_replace简单的regex不

$url = "stackoverflow"; 
    if(!preg_match('/apple/',$url)){ 
    $url = $url.".apple.com"; 
    } 
+0

你想完成什么?你想要像“stackoverflow.com.apple.com”这样的网址吗? – 2012-01-30 22:19:27

+0

让我们说没有TLD的url =“stackoverflow” – ThomasReggi 2012-01-30 22:20:06

+0

Err你的问题没有意义。字符串是否总是以苹果结尾?如果没有,那么你不能使用正则表达式追加到一个字符串。 – CBusBus 2012-01-30 22:21:07

回答

3
$str = 'something'; 
echo preg_replace('/^(?:(?!apple).)*$/is', '$0.apple.com', $str); 

PS如下:修饰符is可能是有用的。

(?:)*使得非捕获模式。它匹配零个或多个(?!apple)的实例。当模式匹配时,除apple$0之外的任何东西都告诉取整串。上述示例并不相同,因为当字符串不以apple开头时,它会匹配任何内容,因为?!apple条件仅在字符串的开始处应用一次。

+0

可以放在'(。)*'括号之外(因为匹配被锚定),防止不必要的字符串扫描:''/ ^(?! apple)。* $/i'。 – 2012-01-30 22:52:49

+0

@ mathematical.coffee尝试你的正则表达式 - 它不会按要求工作 – Cheery 2012-01-30 22:54:21

+0

+1提供被动群组的简短解释? – Josh 2012-01-30 22:58:32