无论使用PHP正则表达式的任何特殊字符,都会从句子中分解单词

时间:2017-03-13 02:22:15

标签: php regex

我有这个功能来爆炸句子中的单词:

function explode_words($input_string='')
    {
        $keywords = preg_split("/[\s,]+/", $input_string); //Here REGEX
        return $keywords; // as array
    }

我举一个例子:

$input_string = 'Pokok < getah < > sumber asli! yang bernilai . Banyak produk guna getah ?';

爆炸的单词将是:

Array
(
    [0] => Pokok
    [1] => <
    [2] => getah
    [3] => <
    [4] => >
    [5] => sumber
    [6] => asli!
    [7] => yang
    [8] => bernilai
    [9] => .
    [10] => Banyak
    [11] => produk
    [12] => guna
    [13] => getah
    [14] => ?
)

如何排除~!@#$%^&*()_+{}|:"<>?'等所有特殊字符?

单词asli!应仅返回asli

任何帮助将不胜感激。 谢谢,周一过得愉快!

2 个答案:

答案 0 :(得分:1)

您可以使用类似"/[^\p{L}]+/"的内容来分割字符串。

function explode_words($input_string = "")        {
    return preg_split("/[^\p{L}]+/u", $input_string, null, PREG_SPLIT_NO_EMPTY);
}

\p{L}是一个Unicode类别,包括小写,大写等字母字符(您可以将其视为[a-zA-Z]的扩展版本,其中包含来自世界上大多数字母表的字符)。< / p>

[^...]部分表示&#34;此组中的任何&#34;。

答案 1 :(得分:0)

可能更容易指定您需要保留的内容,

preg_split("/[^a-zA-Z]+/", $input_string, NULL,  PREG_SPLIT_NO_EMPTY);

在此示例中,a-z和A-Z是允许范围。您可以根据需要进行更改。