如何在包含重音字母的情况下从此正则表达式中排除标点符号?

时间:2019-05-02 20:58:21

标签: php regex laravel

我正在尝试在Laravel中修复一些将关键字与文本中出现的内容匹配的代码。因为它是外语单词和文本,所以我遇到了一些问题-我可以说出“ stackoverflow!”。应与此行匹配“ stackoverflow”:

$test = str_replace(array(',','.','!',';',':','?'), '', trim(strtolower($word)));

但是我不知道如何对其进行编码,这样它1.不会在guillemet和倒置标点上中断,而2.成功地处理了带重音的字符。我写了一行,只是想排除匹配中不包含字母的所有内容:

$test = preg_replace("/[^\x41-\x7A\xC0-\xFF]/","", $test);

但这是两全其美的情况-它在guillemet上失败,同时也无法确保带有重音符号的关键字即使在确定的字符范围内也能匹配。

不用说,我确实尝试编写正则表达式来识别字符本身,它们的HTML名称等等。

如果问题仅在于无法识别扩展字符表,我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:-1)

我已经创建了删除字符串所有特殊字符的功能

     /**
     * Removes the Special Charater from the string
     *
     * @author Manojkiran.A <manojkiran10031998@gmail.com>
     * @param string $stringWiSpCh The Strings With Special Charateers
     * @return string
     **/
    function removeSpecial(string $stringWiSpCh)
    {
        // Removes special chars.
        return preg_replace('/[^A-Za-z0-9\-]/', '', $stringWiSpCh);
    }

希望有帮助