PHP preg_replace:删除所有2个char字和& 3个字母以s结尾

时间:2012-05-02 07:20:28

标签: php regex

对于RegEx,我很惭愧,但我只是遇到了这个问题:

$search=trim(preg_replace('@ [a-z]{1,2}s? @',' ',' '.$search.' '));

据我所知,这应该删除所有小写的2个字符的单词,以及以“s”结尾的任何小写的3个字符的单词。

不起作用的部分是它不会删除以“s”结尾的小写3个字符的单词。

有什么想法吗?

感谢。

参见示例: http://codepad.org/yUpyn8KU

4 个答案:

答案 0 :(得分:3)

试试这个:

$search=trim(preg_replace('/\b([a-z]{1,2}|[a-z]{2}s)\b/',' ',' '.$search.' '));

答案 1 :(得分:1)

如果要清理搜索字符串,可以将其爆炸:

$search_items = explode(' ', $search);
$search = ' ';
foreach ($search_items AS $search_item) {
  $search_item = trim($search_item);
  if (strlen($search_item) > 3 || (strlen($search_item) == 3 && substr($search_item,-1) != 's') {
    $search .= $search_item . ' ';
  }
}

使用正则表达式,我会尝试

$search=trim(preg_replace('@(\s)(\s+)?([a-z]{1,2}s?)(\s)@','$1',' '.$search.' '));
开头和结尾的

(\s)寻找空格。第二对括号查找可能被删除的其他空格。如果找到pattern,则只有第一个空格留在字符串中。

答案 2 :(得分:1)

这解决了它。

$search=trim(preg_replace('@\b[a-z]{1,2}s?\b@','',$search));
$search=preg_replace('@\s+@',' ',$search);

谢谢大家的帮助。

答案 3 :(得分:1)

试试这个:

此处位于Codepad

<?php 
 $string = "ver ae as ads dase asda frasad ae aes ads ad hag hags";
 $result = trim(preg_replace('/\b([a-z]{1,2}|[a-z]{2}s)\b/',' ',' '.$string.' '));
 echo $trim = preg_replace('/[\s]+/',' ',$result);
?>

此处位于Codepad

希望这有帮助。