Php 删除长单词regex

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。它将匹配长单词

我想知道如何从字符串中删除长单词。长度大于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
。它将匹配长单词

  • \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&nbsp;ReallyLongStringComesHere&nbsp;123';
    
    $patterns = array(
        'html_space' => '/&nbsp;/',
        'long_words' => '/[^\s]{5,}/',
        'multiple_spaces' => '/\s{2,}/'
    );
    
    $replacements = array(
        'html_space' => ' ',
        'long_words' => '',
        'multiple_spaces' => ' '
    );
    echo str_replace(' ', '&nbsp;', trim(preg_replace($patterns, $replacements, $s)));
    ?>
    
    总结:

    • 任何以
      \s
      开头或结尾的答案都将无法删除字符串开头和结尾的单词(您应该使用一个测试字符串,该字符串无法删除这些单词!)
    • \b
      不会像那样失败,但不会删除空白。您可以将它与建议的双空格移除器结合起来,但不会保留原始的重复空格(这可能不是问题)
    • explode+infrade有一个很好的特性,它保留了重复的空格,但您必须对每个空格字符都这样做
    • 另一种保留空白的方法(我在这里没有看到)是使用两种模式,一种是以
      \b
      开头,以
      \s
      结尾,另一种是以
      \s
      开头,以
      $
      结尾

    不错,是唯一一个负责URL的also@Imran奥马尔·布赫什:谢谢!如果我的答案解决了你的问题,请考虑通过点击我的答案左侧的选票计数的记号来接受它。是的,我不介意这样做,但是如果你能进一步帮助我,告诉我如何用“Imran Omar Bukhsh”来删除单词的开始和结束:它们应该已经被删除,给我一个示例字符串,告诉我应该输出什么,这样我就可以进行测试。示例:“123 ReallyLongStringComesHere 123”有人能在这里找到bug吗?;)没有错误,只是一个不完整的解决方案,请检查标记为正确答案的答案。我可以向您保证,这是一个错误。关于另一个答案:你在问题中没有具体说明,你是在我回答后问的。顺便说一句,如果您不想保留空白,这个解决方案很好。@stereofrog-是的,我应该更好地定义它,它可以是任何字符的字符串sample'testing 123htttp://stackoverflow.com/questions/6744272/removing-long-words-regex/6744316#6744316 测试123’;-它不会移除该文件url@Imran,请尝试以下操作:
    \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&nbsp;ReallyLongStringComesHere&nbsp;123';
    
    $patterns = array(
        'html_space' => '/&nbsp;/',
        'long_words' => '/[^\s]{5,}/',
        'multiple_spaces' => '/\s{2,}/'
    );
    
    $replacements = array(
        'html_space' => ' ',
        'long_words' => '',
        'multiple_spaces' => ' '
    );
    echo str_replace(' ', '&nbsp;', trim(preg_replace($patterns, $replacements, $s)));
    ?>
    
    123&nbsp;123