我有一个包含一些数字和文本的字符串,我正在尝试将字符串拆分为第一个非数字字符。
例如,我有一些像
这样的字符串$value = '150px';
$value = '50em';
$value = '25%';
我一直在尝试使用preg_split和一个小正则表达式来分割字符串。
$value_split = preg_split( '/[a-zA-Z]/' , $fd['yks-mc-form-padding'] );
我能够使用$value_split[0]
获取字符串的第一部分,例如我可以存储150,或50或25.我还需要返回字符串的第二部分(px,em)或%)。
如何使用preg_split或类似的东西拆分字符串以返回数组的两个部分?
谢谢!
答案 0 :(得分:3)
如果你想使用正则表达式而你还没有,你应该玩RegExr。
要使用正则表达式执行您想要的操作,假设所有字符串都是全数字,然后是所有非数字字符串,您可以这样做:
$matches = array();
preg_match('/([0-9]+)([^0-9]+)/',$value,$matches);
然后$matches[1]
将是数字部分,$matches[2]
将是其余部分
要打破它,
[0-9]
匹配任何数字字符,因此[0-9]+
匹配一行中的一个或多个数字字符,因此每{{}}} $matches[1]
将匹配第一个(数字)文本一组括号
和[^0-9]
匹配任何非数字字符,因此[^0-9]+
匹配一行中的一个或多个非数字字符并填充$matches[2]
,因为它位于第二组括号中
答案 1 :(得分:2)
通过preg_split()
你无法实现你想要的目标。它将删除分隔整个字符串的字符串部分(在这种情况下,它将由字符[a-zA-Z]
分隔)。使用preg_match()
(或preg_match_all()
)功能。
您可以使用此模式:
/([0-9]+)([a-zA-Z%]+)/
请参阅demo。
答案 2 :(得分:0)
使用PREG_SPLIT_OFFSET_CAPTURE标志 - 它将导致返回一个数组,其中item [0]是匹配的字符串,item [1]是原始字符串中的起始位置。 然后,您可以使用该信息通过使用普通的子字符串功能来提取字符串的其余部分。 有点像:
$values_split = preg_split( '/[a-zA-Z]/' , $fd['yks-mc-form-padding'] );
$position = $values_split[0][1]
$length = $values_split[0][0]
$startPos = $position + $length
$numToGet = lenght($input) - $startPos
$remainder = substr($inline, startPos, $numToGet)