我想如何从字符串中删除长字。大于长度的单词n。
我尝试了以下内容:
//remove words which have more than 5 characters from string
$s = 'abba bbbbbbbbbbbb 1234567 zxcee ytytytytytytytyt zczc xyz';
echo preg_replace("~\s(.{5,})\s~isU", " ", $s);
给出输出(不正确):
abba 1234567 ytytytytytytytyt zczc xyz
答案 0 :(得分:5)
使用此正则表达式:\b\w{5,}\b
。它将匹配长词。
\b
- 字边界\w{5,}
- 字母数字5
或更多重复\b
- 字边界答案 1 :(得分:1)
更好的方法是使用常规字符串操作而不是正则表达式?一个简单的内爆/爆炸和strlen会做得很好。当然,这取决于你的字符串的大小,但对于你的例子,它应该没问题。
答案 2 :(得分:1)
<?php
//remove words which have more than 5 characters from string
$s = 'abba bbbbbbbbbbbb 1234567 zxcee ytytytytytytytyt zczc xyz';
$patterns = array(
'long_words' => '/[^\s]{5,}/',
'multiple_spaces' => '/\s{2,}/'
);
$replacements = array(
'long_words' => '',
'multiple_spaces' => ' '
);
echo trim(preg_replace($patterns, $replacements, $s));
?>
输出:
abba zczc xyz
更新,以解决您在评论中提出的问题。你可以这样做:
<?php
//remove words which have more than 5 characters from string
$s = '123 ReallyLongStringComesHere 123';
$patterns = array(
'html_space' => '/ /',
'long_words' => '/[^\s]{5,}/',
'multiple_spaces' => '/\s{2,}/'
);
$replacements = array(
'html_space' => ' ',
'long_words' => '',
'multiple_spaces' => ' '
);
echo str_replace(' ', ' ', trim(preg_replace($patterns, $replacements, $s)));
?>
输出:
123 123
答案 3 :(得分:0)
你很亲密:
preg_replace("~\w{5,}~", "", $s);
工作键盘示例:http://codepad.org/c5AN1E6M
此外,您需要将多个空格折叠为一个:
preg_replace("~ +~", " ", $s);
答案 4 :(得分:0)
添加全局修饰符g
或使用preg_match_all()
。
答案 5 :(得分:0)
要点:
\s
开头或结尾的任何答案都无法删除字符串开头和结尾处的单词(并且您应该使用一个测试字符串,这些字符串会失败!)\b
不会失败,但不会删除空格。您可以将建议的双空间移除器结合起来但不会保留原始重复的空白(这可能不是问题)。\b
开头,以\s
开头,另一种以\s
开头,以$
结尾。