使用预定义的模板表示php字符串

时间:2012-02-20 20:55:09

标签: php zend-framework

我需要短语php字符串并根据模板将其“爆炸”成3个变量。

我尝试使用explode功能,但它有点乱。

    list($name, $role) = explode(' (', $value);
    list($firstName, $lastName) = explode(' ', $name);

例如,我有这些字符串:

$str_1 = "Jane Joe (Team 1)";
$str_2 = "John Joe (Bank)";

我需要提取first_namelast_namerole,这是括号中的字符串。

我也试过正则表达式,但我对正则表达式有点生疏

5 个答案:

答案 0 :(得分:2)

尝试以下方法:

$str_1 = "Jane Joe (Team 1)";  
preg_match("/^(\w*)\s?(\w*)\s?\\((.*)\\)$/", $str_1, $matches);  
var_dump($matches);  

答案 1 :(得分:2)

你可以使用正则表达式(你可能必须使用前两个分组的允许字符,下面允许使用单词字符和连字符):

$str_1 = "Jane Joe (Team 1)";
$matches = array();
if (preg_match('/([\w-]+) ([\w-]+) \((.*)\)/', $str_1, $matches)) {
    echo $matches[1]; // Jane
    echo $matches[2]; // Joe
    echo $matches[3]; // Team 1
}

答案 2 :(得分:2)

您可以尝试使用正则表达式来获取输入字符串的那些部分:

PHP preg_match函数:http://php.net/manual/en/function.preg-match.php

preg_match('~^(.+) (.+)\((.+\))$~', $str_1, $matches);

这种调用使得@matches数组包含:

  • $ matches [0]:整个输入字符串
  • $ matches [1]:名字
  • $ matches [2]:姓氏
  • $ matches [3]:role

您还可以检查该模式是否与输入字符串匹配:

if(preg_match('^(.+) (.+)\((.+\))$', $str_1, $matches)) {
    // do something with matches here
}

答案 3 :(得分:1)

只需使用explodesubstr

list($first_name, $last_name, $role) = explode(" ", "Jane Joe (Team 1)", 3);
$role = substr($role, 1,-1);

var_dump($first_name, $last_name, $role);

示例:http://ideone.com/Ike0M

当然,这假设有1个单词的名字和姓氏。

答案 4 :(得分:1)

虽然我认为不同的方法比传递纯数据字符更清晰,但正则表达式可能会为您实现此目的。

$strArray = array(
    "Jane Joe (Team 1)",
    "John Joe (Bank)"
);

foreach($strArray as $str) {
    $match = array();
    preg_match("/^\(w*)/", $str, $match);
    $firstName = $match[0];

    preg_match("/\s\(w*)/", $str, $match);
    $lastName = $match[0];

    preg_match("/\((\w)\)/", $str, $match);
    $role = $match[0];
}