如果字符串包含4个或更多的单词,我将尝试删除它的括号。我一直在挠我的头,用它什么也做不了。
preg_replace('#\([word]{4,}\)#', '', $str); # pseudo code样本字符串:
Robert Alner基金标准公开NH平跑(由Andrew Stewart慈善基金会支持)
匹配(括号中超过x个单词)并删除:
(由安德鲁·斯图尔特慈善基金会资助)
我有两个数据来源,并且正在使用:
similar_text($str1, $str2, &$percent)比较和延长括号中的字符串对于一个源是唯一的。
发布于 2010-11-16 18:01:34
你离我很近..。
preg_replace('#\((\b\w+\b[^\w)]*){4,}\)#', '', $str);基本上,内部子模式(\b\w+\b[^\w)]*)匹配一个单词边界(意思不是在两个单词字符之间),后面是至少一个单词字符(a-z0-9),后面是另一个单词边界,最后是0或多个不是单词字符且不是)的字符.
用下列方法进行测试:
$tests = array(
'test1 (this is three)',
'test2 (this is four words)',
'test3 (this is four words) and (this is three)',
'test4 (this is five words inside)',
);
foreach ($tests as $str) {
echo $str . " - " . preg_replace('#\((\b\w+\b[^\w)]*){4,}\)#', '', $str) . "\n";
}给予:
test1 (this is three) - test1 (this is three)
test2 (this is four words) - test2
test3 (this is four words) and (this is three) - test3 and (this is three)
test4 (this is five words inside) - test4发布于 2010-11-16 17:45:47
你不需要preg_replace()。只需用substr_count()计算空格,然后使用str_replace()。
发布于 2010-11-16 17:56:51
语法[…]有一个特殊的含义。[…]被称为字符类,并匹配列出的字符之一。因此,[word]与w、o、r、d的特征之一相匹配。
现在,如果你想匹配单词,你应该首先定义一个单词是什么。如果一个单词是除空格字符之外的字符序列(\S表示所有非空白字符),则可以这样做:
/\S+(\s+\S+){3,}/这将匹配由空白字符(\s)分隔的任何四个或多个单词序列(非空白字符序列)。
括号内的四个或四个以上字:
/\(\S+(\s+\S+){3,})/请注意,除了空格字符之外,\S还匹配其他任何内容,这意味着甚至连方括号都匹配。因此,您可能需要将\S更改为[^\s)]
/\([^\s)]+(\s+[^\s)]+){3,})/https://stackoverflow.com/questions/4197176
复制相似问题