停止正则表达式匹配单词中单词的一部分

时间:2014-01-29 07:55:07

标签: php regex preg-match

if(preg_match(/(www|co.uk|uk.com|com|net|edu|org|org.uk|info|me|biz|co|io)/, $hostParts)) {

    //unset this element from the array;

}

我使用正则表达式删除常见的域扩展名。我遇到的问题是我的表达式也与www.cnet.com示例中的cnet网络相匹配。我如何阻止它匹配部分单词,例如像www.cnet.com这样的域名,因为我只想删除www和com部分。感谢。

1 个答案:

答案 0 :(得分:2)

一般来说,\b可以满足您的需求。使用两个\b对您的单词进行入站。 but check the updates for your specific case

if(preg_match('/\b(www|co.uk|uk.com|com|net|edu|org|org.uk|info|me|biz|co|io)\b/si', $hostParts)) {

    //unset this element from the array;

}

<强>更新

这是一个更新,这是针对网址的,我没有考虑到这一点:

if(preg_match('/(\bwww\.|(\.(co\.uk|uk\.com|com|net|edu|org|org.uk|info|me|biz|co|io)\b))/si', $hostParts)) {

    //unset this element from the array;

}

更新2

这是一个例子,请注意我已经用“org.uk”交换了“org”,因为如果第一个被捕获,那么第二个将不会:

<?php

  $str = 'www.cnet.org.uk';
  $str = preg_replace('/(\bwww\.|(\.(co\.uk|uk\.com|com|net|edu|org.uk|org|info|me|biz|co|io)\b))/si', '', $str);
  echo $str;

?>