用 preg_split 拆分英文字符串(和非英文字母)

split string with preg_split on english (and non english letters)

我想把我的句子分成两部分。因为它们是由英文字母和非英文字母组成的。我有我在 preg_split 方法中使用的正则表达式来获取正常的字母和字符。不过,这适用于相反的情况,我只剩下日语而不是英语。

我使用的字符串:

すぐに諦めて昼寝をするかも知れない。  I may give up soon and just nap instead.

我的尝试:

    $parts = preg_split("/[ -~]+$/", $cleanline); // $cleanline is the string above
            print_r($parts);

我的结果

Array ( [0] => すぐに諦めて昼寝をするかも知れない。   [1] => ) 

如您所见,我确实得到了一个空的第二个值。如何将英文和非英文文本都放入两个不同的字符串中?为什么即使我使用了正确的正则表达式(根据我一直在测试的结果)也没有返回英文文本?

尝试 mb_split 而不是 preg_split 函数。

mb_regex_encoding('UTF-8');
mb_internal_encoding("UTF-8"); 
$parts = mb_split("/[ -~]+$/", $cleanline);

如果两个字符串之间有两个空格,如示例所示,您可以使用简单的 \s{2} 轻松拆分它们:

<?php
$s = "すぐに諦めて昼寝をするかも知れない。  I may give up soon and just nap instead.";
$s = preg_split("/\s{2}/", $s);
print_r($s);
?>   

输出:

Array
(
    [0] => すぐに諦めて昼寝をするかも知れない。
    [1] => I may give up soon and just nap instead.
)

演示:http://ideone.com/uD2W1Q

您可以使用 lookaround 在非字母和字母之间的边界上拆分 + space

$str = 'すぐに諦めて昼寝をするかも知れない。  I may give up soon and just nap instead.';
$parts = preg_split("/(?<=[^a-z])(?=[a-z\h])|(?<=[a-z\h])(?=[^a-z])/i", $str, 2);
print_r($parts);

输出:

Array
(
    [0] => すぐに諦めて昼寝をするかも知れない。
    [1] =>   I may give up soon and just nap instead.
)