很抱歉在 RegEx 方面很愚蠢,但我只是对此有疑问:
$search=trim(preg_replace('@ [a-z]{1,2}s? @',' ',' '.$search.' '));
据我所知,这应该删除所有小写 2 个字符的单词,以及任何以“s”结尾的小写 3 个字符的单词。
不起作用的部分是它不会删除以“s”结尾的小写 3 字符单词。
有任何想法吗?
谢谢。
很抱歉在 RegEx 方面很愚蠢,但我只是对此有疑问:
$search=trim(preg_replace('@ [a-z]{1,2}s? @',' ',' '.$search.' '));
据我所知,这应该删除所有小写 2 个字符的单词,以及任何以“s”结尾的小写 3 个字符的单词。
不起作用的部分是它不会删除以“s”结尾的小写 3 字符单词。
有任何想法吗?
谢谢。
尝试这个 :
$search=trim(preg_replace('/\b([a-z]{1,2}|[a-z]{2}s)\b/',' ',' '.$search.' '));
这解决了它。
$search=trim(preg_replace('@\b[a-z]{1,2}s?\b@','',$search));
$search=preg_replace('@\s+@',' ',$search);
感谢大家的帮助。
如果要清理搜索字符串,可以将其分解:
$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)
在开头和结尾寻找空格。第二对括号查找可以删除的其他空格。如果找到模式,则字符串中只剩下第一个空格。