Php 删除长单词regex
我想知道如何从字符串中删除长单词。长度大于n的单词 我尝试了以下方法:Php 删除长单词regex,php,regex,Php,Regex,我想知道如何从字符串中删除长单词。长度大于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); 给出输出(不正确): 使用此正则表达式:\b\w{5,}\b。它将匹配长单词
//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);
给出输出(不正确):
使用此正则表达式:
\b\w{5,}\b
。它将匹配长单词
\b
-单词边界\w{5,}
-字母数字5
或更多重复\b
-单词边界更好的方法是使用常规字符串操作而不是正则表达式?一个简单的内爆/爆炸和斯特伦会做得很好。当然,这取决于字符串的大小,但对于您的示例来说,它应该很好。您很接近:
preg_replace("~\w{5,}~", "", $s);
工作代码板示例:
此外,您还需要将多个空间收拢为一个:
preg_replace("~ +~", " ", $s);
添加全局修饰符
g
或使用preg\u match\u all()
更新,以解决您在评论中提出的问题。您可以这样做:
<?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)));
?>
总结:
- 任何以
开头或结尾的答案都将无法删除字符串开头和结尾的单词(您应该使用一个测试字符串,该字符串无法删除这些单词!)\s
不会像那样失败,但不会删除空白。您可以将它与建议的双空格移除器结合起来,但不会保留原始的重复空格(这可能不是问题)\b
- explode+infrade有一个很好的特性,它保留了重复的空格,但您必须对每个空格字符都这样做
- 另一种保留空白的方法(我在这里没有看到)是使用两种模式,一种是以
开头,以\b
结尾,另一种是以\s
开头,以\s
结尾$
\b\S{5,}\b
<?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