用 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.
)
您可以使用 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.
)
我想把我的句子分成两部分。因为它们是由英文字母和非英文字母组成的。我有我在 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.
)
您可以使用 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.
)