有什么想法如何将字符串分成3个部分,其中两个“定界符”的第一个和最后一个“定界符”分别是字母或数字?
$str = "%@-H-e-l-l-o-7-9#$%";
会像这样分裂:
$arr=("%@-","H-e-l-l-o-7-9", "#$%");
和
$str = "Hi$73";
会像这样分裂:
$arr=("","Hi$73", "");
和
$str = "Беларусь!";
会像这样分裂:
$arr=("","Беларусь", "!");
和
$str = "!";
会像这样分裂:
$arr=("!","", "");
和
$str = "";
会像这样分裂:
$arr=("","", "");
和
$str = "ў55ЎW";
会像这样分裂:
$arr=("","ў55ЎW", "");
这意味着它将返回一个(始终)由3个元素组成的数组,第二个元素的第一个和最后一个符号是数字或拉丁字母/西里尔字母,并且该数组的第一个和last(third)元素绝对不包含数字,并且字母,并且该字符串的连接就是源字符串
谢谢你。
这是完成这项工作的一种方法:
$in = array(
"%@-H-e-l-l-o-7-9#$%",
"Hi$73",
"Беларусь!",
"!",
"",
"ў55ЎW",
'$abc$$$',
"асоба_",
"34.5",
'#_!',
);
foreach($in as $elem) {
preg_match('/^([^\pL\pN]*)((?=[\pL\pN]|$)[^_]*(?<=[\pL\pN])|^)?([^\pL\pN]*)$/u', $elem, $m);
printf("'%15s'%s'%10s'\t%s'%10s'\t%s'%10s'%s", "$elem","=> (1): ",$m[1],"(2): ",$m[2], "(3): ",$m[3],"\n");
}
在哪里:
\pL
代表任何语言的任何字母\pN
代表任何语言的任何数字输出:
'%@-H-e-l-l-o-7-9#$%'=> (1): ' %@-' (2): 'H-e-l-l-o-7-9' (3): ' #$%'
' Hi$73'=> (1): ' ' (2): ' Hi$73' (3): ' '
'Беларусь!'=> (1): ' ' (2): 'Беларусь' (3): ' !'
' !'=> (1): ' !' (2): ' ' (3): ' '
' '=> (1): ' ' (2): ' ' (3): ' '
' ў55ЎW'=> (1): ' ' (2): ' ў55ЎW' (3): ' '
' $abc$$$'=> (1): ' $' (2): ' abc' (3): ' $$$'
' асоба_'=> (1): ' ' (2): 'асоба' (3): ' _'
' 34.5'=> (1): ' ' (2): ' 34.5' (3): ' '
' #_!'=> (1): ' #_!' (2): ' ' (3): ' '
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句