2015-12-02 48 views
-2

因此,我正在處理一些PHP,並尋找一些常規exp的幫助。preg_split與最後2-3個字符非字母數字

我有一個字符串數組看起來像這樣:

$variable_with_strings 
array(
    [0][art] => >AngusDelu - 
    [1][art] => >PatatasJr - 
    [2][art] => >AngusHabane * 
    [3][art] => >Papas Med * 
    [4][art] => >AngusDelu* 
    [5][art] => >Papas Med* 
    [6][art] => >AngusHabane** 
    [7][art] => >Papas Med** 
    [8][art] => >Papas Med_*- 
    [9][art] => >Manza Med_*- 
) 

我循環TRU每個人,治療對象的單一變量($ variable_with_strings

我想串一分爲二的後來組

東西尋找一個正則表達式與preg_split()像這樣︰ (我需要兩部分; 1 - 說明項目和2 - 組標誌)

爲每一個我期望有:

$word = array 
    [art] => >AngusDelu 
    [sep] => -) 

$word = array(
    [art] => >PatatasJr 
    [sep] => -) 

$word = array(
    [art] => >AngusHabane 
    [sep] => *) 

$word = array(
    [art] => >Papas Med 
    [sep] => *) 

$word = array(
    [art] => >AngusDelu 
    [sep] => *) 

$word = array(
    [art] => >Papas Med 
    [sep] => *) 

$word = array(
    [art] => >AngusHabane 
    [sep] => **) 

$word = array( 
    [art] => >Papas Med 
    [sep] => **) 

$word = array(
    [art] => >Papas Med 
    [sep] => _*-) 

$word = array(
    [art] => >Manza Med 
    [sep] => _*-) 
) 

所以我用的是一樣的東西:

$word = preg_split('/[^\w]/',$variable_with_strings); 

但這種分裂每個空格,

這是有點棘手,我猜測,因爲在第一個字符總是有一個>,並且最後的字符是*,_,-或某個時間a這些「」之前的空格,有時特殊字符在1,2末端甚至3次出現。

這可以這樣做嗎?

感謝

回答

0

你可以使用使preg_split,比賽像/(\W+$)/串剛結束,並通過PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE標誌作爲第四個參數以捕捉無論你是作爲結果的一部分分裂上。 PREG_SPLIT_DELIM_CAPTURE捕獲您正在拆分的分隔符,PREG_SPLIT_NO_EMPTY將確保沒有空的結果。

實施例:

<?php 
$art = array(
    '>AngusDelu -', 
    '>PatatasJr -', 
    '>AngusHabane *', 
    '>Papas Med *', 
    '>AngusDelu*', 
    '>Papas Med*', 
    '>AngusHabane**', 
    '>Papas Med**', 
    '>Papas Med--', 
    '>Manza Med--', 
    ); 

foreach($art as $a){ 
    $split = preg_split('/(\W+$)/', $a, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); 
    echo '<pre>'.print_r($split,true).'</pre>'; 
} 

演示:http://codepad.viper-7.com/9mCDlc

輸出:

Array 
(
    [0] => >AngusDelu 
    [1] => - 
) 

Array 
(
    [0] => >PatatasJr 
    [1] => - 
) 

Array 
(
    [0] => >AngusHabane 
    [1] => * 
) 

Array 
(
    [0] => >Papas Med 
    [1] => * 
) 

Array 
(
    [0] => >AngusDelu 
    [1] => * 
) 

Array 
(
    [0] => >Papas Med 
    [1] => * 
) 

Array 
(
    [0] => >AngusHabane 
    [1] => ** 
) 

Array 
(
    [0] => >Papas Med 
    [1] => ** 
) 

Array 
(
    [0] => >Papas Med 
    [1] => -- 
) 

Array 
(
    [0] => >Manza Med 
    [1] => -- 
) 

每一個是在一個單獨的陣列,因爲你說你有一個數組,所以你需要循環結束並在數組中的每個條目上運行拆分。您可以輕鬆地在循環中一次處理一個數組,或者將它們合併爲一個數組以便稍後使用。

+0

事實上,每一個原始的$ var不是整個單一的 –

+0

那麼,這對單個'$ var'很好。這基本上就是這個例子所做的。 –

+0

這對個人$ vars很好,使用「0」修飾符而不是「-1」,因爲我需要在另一個$ var中分隔的所有最後的字符,謝謝,對不起的新手/慢回答,@ chris85 –

0

我只想用

[^a-z]+$ 

preg_replacemi修飾。 (你的例子沒有數字;如果你想號碼以及在字符類中添加\d

Regex101演示:https://regex101.com/r/rX3oK7/2(注意演示的g修正PHP中不使用時,preg_replace是全球已)

PHP用法:

$string = '[art] => >AngusDelu - 
[art] => >PatatasJr - 
[art] => >AngusHabane * 
[art] => >Papas Med * 
[art] => >AngusDelu* 
[art] => >Papas Med* 
[art] => >AngusHabane** 
[art] => >Papas Med** 
[art] => >Papas Med-- 
[art] => >Manza Med--'; 
echo preg_replace('/[^a-z]+$/im', '', $string); 

輸出:

[art] => >AngusDelu 
[art] => >PatatasJr 
[art] => >AngusHabane 
[art] => >Papas Med 
[art] => >AngusDelu 
[art] => >Papas Med 
[art] => >AngusHabane 
[art] => >Papas Med 
[art] => >Papas Med 
[art] => >Manza Med 

PHP演示: https://eval.in/479444

+0

這是否消除了最後的字符?因爲我需要那些用於以後的分組 - 協會 –

+0

哦,我看到你想要拿出其他角色並將它們移到下一行,是嗎?也許這樣? https://eval.in/479454 – chris85

+0

多數民衆贊成它!我更新我的Q,因爲我認爲我輸錯了代碼輸入 –

相關問題