брой символи с preg_replace

Ev0luti0N

Registered
Има ли вариянт да се използва примерно от 2 до 100 символа. Примерно, ако имам даден стринг с 20 думи обаче искам да взема думите само които са по-дълги от 2 символа как мога да го направя с preg_replace?
Ще се питате добре, защо с preg_replace, а не с preg_match, защото замествам всички символи разилично от (aA-zZаА-яЯ0-9) на (празно пространство) тоест SPACE(" ").
Та има ли някакъв вариянт да се направи само с preg_replace или трябва да изпозлвам и preg_match. Цялата идея е да ми замести всички символи различни от по-горните със SPACE и тези думи които са по кратки от 2 символа да не ги връща.
 
Тука една моя идея:
PHP:
<?php
function replaceWords($string, $symbols = 5, $whatToReplace = " "){
    $words = array();
    $words = preg_split("/[\s]+/si", $string);
    foreach($words as $word){
        if(strlen($word) > $symbols){
            $word = preg_replace("/[^a-z0-9]/sui", $whatToReplace , $word);
        }
        $endResult .= " ".$word;
    }
    return $endResult;
}

$string = "d&g fer^fsfsff sadfsdf*&^ f$ ppp$dfff";
echo $string."<br />========================================<br />";
echo replaceWords($string);
?>
Като тествах, замести символите само в тези думи, които бяха по-дълги от 5 символа!
 
Ето ти ъпдейтната версия на кода на емаги, без да връща по малките от 2.

Код:
<?php

function replaceWords($string, $symbols = 5, $whatToReplace = " "){
    // Да не хвърля E_NOTICE
    $endResult = '';
    $words = array();
    $words = preg_split("/[\s|\W]+/si", $string);
    
    foreach($words as $word) {
    
        $word = preg_replace('/\W+/', $whatToReplace, $word);
        
        if(strlen($word) <= $symbols) {
            continue;
        }
        
        $endResult .= " " . $word;
    }
    return $endResult;
}

$string = "This is just a test.Is it Good? Hi world!";

echo $string."<br />========================================<br />";

echo replaceWords($string, 2);

This just test Good world
 
emagi каза:
Тука една моя идея:
PHP:
<?php
function replaceWords($string, $symbols = 5, $whatToReplace = " "){
    $words = array();
    $words = preg_split("/[\s]+/si", $string);
    foreach($words as $word){
        if(strlen($word) > $symbols){
            $word = preg_replace("/[^a-z0-9]/sui", $whatToReplace , $word);
        }
        $endResult .= " ".$word;
    }
    return $endResult;
}

$string = "d&g fer^fsfsff sadfsdf*&^ f$ ppp$dfff";
echo $string."<br />========================================<br />";
echo replaceWords($string);
?>
Като тествах, замести символите само в тези думи, които бяха по-дълги от 5 символа!
+1 :?:
 

Back
Горе