我有一个测试字符串,如下所示:
digit{digit}digit
我想将这个字符串分成3个变量。例如,40{1}2
应分为40 1 2.字符串可以与2034{345}1245
一样大。我认为正则表达式是分割这个字符串的最佳方法。
这是我到目前为止所拥有的:
$productID = preg_match('/(.*?){/', $product);
$productOptionID = preg_match('/{(.*?)}/', $product);
$optionValueID = preg_match('/}(.*?)/', $product);
答案 0 :(得分:5)
此处不需要正则表达式:
$str = '40{1}2';
sscanf($str, '%d{%d}%d', $part_1, $part_2, $part_3);
// $part_1 would equal: 40
// $part_2 would equal: 1
// $part_3 would equal: 2
使用此方法,变量已经转换为整数。
答案 1 :(得分:1)
请改为尝试:
preg_match('/^(\d+)\{(\d+)\}(\d+)$/', '123{456}789', $matches)
$productId = $matches[1];
$productOptionId = $matches[2];
$productValueId = $matches[3];
答案 2 :(得分:1)
$str = '123{456}789';
$arr = preg_split("/[{}]/", $str);
print_r($arr);
<强>输出:强>
Array
(
[0] => 123
[1] => 456
[2] => 789
)
答案 3 :(得分:0)
我个人会创建一个简单的函数来管理从字符串中获取数据的过程,如下所示:
function processID($string)
{
$result = array();
$c = 0;
for($i = 0; $i < strlen($string); $i++)
{
if(!isset($result[$c]))
{
$result[$c] = "";
}
if($string[$i] == "{" || $string[$i] == "}")
{
$c++;
continue;
}
$result[$c] .= $string[$i];
}
return $result;
}
然后只需使用:
$result = processID("2034{345}1245");
输出结果如下:
array(3) {
[0]=>
string(4) "2034"
[1]=>
string(3) "345"
[2]=>
string(4) "1245"
}
可以在这里找到一个工作示例:http://codepad.org/7k5tAzuy