【问题标题】:preg_replace allow certain characters, delete short wordspreg_replace 允许某些字符,删除短词
【发布时间】:2016-12-31 00:59:46
【问题描述】:

我的代码可以删除任何不超过 3 个字母的单词。

$result = trim( preg_replace
("/[^a-z0-9']+([a-z0-9']{1,3}[^a-z0-9']+)*/i","   ",$_POST['query']));

虽然有问题。首先,我不知道如何允许某些字符(准确地说是波兰语,如 ś、ć、ż 等)。

其次,preg_replace 仅删除位于字符串中间的短词,因此如果字符串是“我喜欢某物”或更糟糕的“我喜欢它”之类的内容,则“我”和“它”会留在这里。唯一可以正常工作的情况是字符串类似于“this is something”(“is”将从字符串中删除)。

【问题讨论】:

    标签: php string


    【解决方案1】:

    我认为这可能是解决方案:

    $re = '/\b\w{1,3}\b/u';
    $str = 'Ściana jest biała a obraz jest kolorowy it is something';
    
    $result = trim(preg_replace($re,"",$str));
    echo $result;
    //just in case, per comments, if some unwanted white spaces are left...
    
    $res=preg_replace("%\s{2,}%"," ",$result);
    echo $res;
    

    我添加了单词边界,因此所有小于(或等于)3 个字符的单词都应替换为空格,AND,对于波兰语字符 - 您需要 u 修饰符。请测试并告诉我这是否适合您。

    在线测试:https://eval.in/706650

    【讨论】:

    • 它可以工作,但它会输出额外的''(空字符串)。这是一个问题,因为 $result 将用于搜索我的表,并且当查询中有 LIKE '%%' 时,它将逐字获取所有内容。它仍然比我迄今为止尝试过的任何东西都要好,但我必须摆脱那个空字符串
    • @Vortic,没问题 - 替换为:($re," ",$str));一个空格,或者,简单,空字符串,如果这是目标? ($re,"",$str));?
    • 这显示了正在发生的事情i.imgur.com/IBTrBeh.png 基本上,您的代码以某种方式在某处创建了空字符串,并且该空字符串稍后用于搜索表(我用红色强调了所有空字符串)。通常我会忽略那个空字符串,但因为它会导致获取整个表,所以必须修复它。我按照您的建议替换了代码,但结果仍然相同。
    • @Vortic,然后试试这个: $res=preg_replace("%\s{2,}%"," ",$result);一个替换更多,在查询之前 - 所以,这必须给单词之间有一个空格,这样你就可以用那个空格分割。 (你是在后面拆分字符串,对吧?)
    • 现在没有空字符串,而是代码不会删除 3 个字母或更少的单词 :)
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2016-12-16
    • 2010-12-09
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多