preg_split 最后 2-3 个字符非字母数字
preg_split with last 2-3 characters non alphanumerical
所以我正在研究一些 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);
但这会分裂每个白色 space,
我猜这有点棘手,因为在第一个字符中总是有一个 >
,最后一个字符是 *
、_
、-
或者有时 space 在这些 " " 之前,有时特殊字符在末尾出现 1、2 甚至 3。
这样可以吗?
谢谢
我会用
[^a-z]+$
与 preg_replace
以及 m
和 i
修饰符。 (您的示例没有数字;如果您还需要数字,请在字符 class 中添加 \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
您可以使用 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] => --
)
每个都在一个单独的数组中,因为你说你有一个数组,所以你需要循环并运行拆分数组中的每个条目。您可以轻松地在循环中一次处理一个数组,或者将它们组合成一个数组以备后用。
所以我正在研究一些 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);
但这会分裂每个白色 space,
我猜这有点棘手,因为在第一个字符中总是有一个 >
,最后一个字符是 *
、_
、-
或者有时 space 在这些 " " 之前,有时特殊字符在末尾出现 1、2 甚至 3。
这样可以吗?
谢谢
我会用
[^a-z]+$
与 preg_replace
以及 m
和 i
修饰符。 (您的示例没有数字;如果您还需要数字,请在字符 class 中添加 \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
您可以使用 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] => --
)
每个都在一个单独的数组中,因为你说你有一个数组,所以你需要循环并运行拆分数组中的每个条目。您可以轻松地在循环中一次处理一个数组,或者将它们组合成一个数组以备后用。