正则表达式查询从字符串中分离并提取两个不同的集合?

时间:2011-03-24 09:33:42

标签: php regex

我需要从字符串中提取两个单独的信息。

例如,

$string = 'int(5)';
//Now I need "int" and the text inside the brackets "5" seperately;
$datatype = ?
$varlength = ?

如何提取这些信息?

3 个答案:

答案 0 :(得分:2)

使用此正则表达式

^([a-z]+)\(([0-9]+)\)$

if (preg_match('~^([a-z]+)\(([0-9]+)\)$~i', 'int(5)', $matches)) {
  $datatype  = $matches[1]; // int
  $varlength = $matches[2]; // 5
}

修改

如果您想在括号中匹配多个数字,请根据需要展开它:

^([a-z]+)\(([0-9a-zA-Z, ]+)\)$ // numbers, letters, comma or space
^([a-z]+)\(([^)]+)\)$          // anything but a closing bracket

答案 1 :(得分:1)

一种方式:

list($datatype, $varlength) = explode('(', trim($string, ')'));

仅当只有一个开括号时才有效。

参考: listexplodetrim

答案 2 :(得分:1)

在这种情况下。你想匹配括号内的任何东西,使用这个

preg_match('/^([a-z]+)\(([a-zA-Z0-9\,]+)\)$/', 'enum(1,a)' , $matches);
print_r($matches);