所以我正在研究一些php,并寻求一些常规exp的帮助。
我有一个字符串数组,如下所示:
$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_*-
)
我循环使用每一个,作为单个变量处理($ 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);
但这会分裂每个空白区域,
我觉得这有点棘手,因为在第一个字符中始终有>
,最后一个字符是*
,_
,-
或某些字符在这些“”之前计算一个空格,有时候特殊的字符在结尾处有1,2或3个。
可以这样做吗?
感谢
答案 0 :(得分:0)
我会用
[^a-z]+$
使用preg_replace
以及m
和i
修饰符。 (您的示例没有数字;如果您还想要数字,请在字符类中添加\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
答案 1 :(得分: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] => --
)
每个都在一个单独的数组中,因为你说你有一个数组,所以你需要循环并在数组中的每个条目上运行split。您可以在循环中一次使用一个数组,或者将它们组合成一个数组以便以后使用。