在英语(和非英语字母)上使用preg_split拆分字符串

时间:2016-11-14 02:53:06

标签: php regex preg-split

我想把我的句子分成两部分。因为它们由英文字母和非英文字母组成。我有正则表达式我在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] => ) 

正如你所看到的,我确实得到一个空的第二个值。如何将英语和非英语文本分成两个不同的字符串?为什么即使我使用正确的正则表达式(从我一直在测试的),英文文本也不会返回?

3 个答案:

答案 0 :(得分:2)

尝试使用mb_split而不是preg_split函数。

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

答案 1 :(得分:2)

如果您在示例中显示两个字符串之间有两个空格,则可以使用简单的 <!-- Container (Pricing Section) --> <div id="pricing" class="container-fluid"> <div class="text-center"> <h2>Pricing</h2> <h4>blabla</h4> </div> <div class="row slideanim-'inline'"> {% for post in posts %} <div class="col-sm-4 col-xs-12"> <div class="panel panel-default text-center"> <div class="panel-heading"> <h1><a href="">{{ post.offer_option}}</a></h1> </div> <div class="panel-body"> <p><strong>20</strong> {{post.prop_one}}</p> <p><strong>20</strong>{{post.prop_two}} </p> <p><strong>20</strong>{{post.prop_three}}</p> </div> <div class="panel-footer"> <h3>{{ post.price}}</h3> <h4>{{ post.period}}</h4> </div> <button class="btn btn-lg">Sign Up</button> </div> </div>{% endfor %} </div> 轻松拆分它们:

\s{2}

输出:

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

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

答案 2 :(得分:2)

您可以使用lookaround分割非字母和字母+空格

之间的边界
$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.
)