Php正则表达式代码

时间:2012-03-09 12:23:03

标签: php regex string split

任何人都可以看看我写的PHP代码。我想将三个信息提取到一个数组中,但它对我不起作用。

$string = "<Name>Joh Doe <Email>joh.doe@gmail.com <App ID> 130105"
$var = preg_split("/^<.*<$/" , $string);

谢谢,

5 个答案:

答案 0 :(得分:3)

$string = "<Name>Joh Doe <Email>joh.doe@gmail.com <App ID> 130105";
preg_match_all('/<([^>]*)>([^<]+)/' , $string, $matches);
var_dump($matches);

给出:

array(3) {
  [0] => array(3) {
    [0] => string(14) "Joh Doe "
    [1] => string(25) "joh.doe@gmail.com "
    [2] => string(15) " 130105"
  }
  [1] => array(3) {
    [0] => string(4) "Name"
    [1] => string(5) "Email"
    [2] => string(6) "App ID"
  }
  [2] => array(3) {
    [0] => string(8) "Joh Doe "
    [1] => string(18) "joh.doe@gmail.com "
    [2] => string(7) " 130105"
  }
}

答案 1 :(得分:2)

不要将正则表达式锚定在拆分中,正则表达式也不会以<而是>结束。

$str = "<Name>Joh Doe <Email>joh.doe@gmail.com <App ID> 130105";
$arr = preg_split("/<[^>]+>/" , $str);
print_r($arr);

<强>输出:

Array
(
    [0] =>
    [1] => Joh Doe
    [2] => joh.doe@gmail.com
    [3] =>  130105
)

答案 2 :(得分:2)

您可以使用:

$string = "<Name>Joh Doe <Email>joh.doe@gmail.com <App ID> 130105";
preg_match_all('/>\s*([^<]+)/', $string, $var);

print_r($var[1]);

输出:

Array
(
    [0] => Joh Doe 
    [1] => joh.doe@gmail.com 
    [2] => 130105
)

答案 3 :(得分:1)

您缺少导致以下内容的分隔符:

Warning: preg_split() [function.preg-split]: No ending delimiter

这是你应该拥有的:

$string = "<Name>Joh Doe <Email>joh.doe@gmail.com <App ID> 130105";
$var = preg_split("#^<.*<$#" , $string);
print_r($var);

<强>结果:

Array
(
    [0] => Joh Doe joh.doe@gmail.com  130105
)

答案 4 :(得分:1)

试试这个

$string = "<Name>Joh Doe <Email>joh.doe@gmail.com <App ID> 130105";
$var = preg_split("#\s*<.*?>\s*#" , $string);
print_r($var);

输出:

  

数组([0] =&gt; [1] =&gt; Joh Doe [2] =&gt; joh.doe@gmail.com [3] =&gt; 130105)

第一个索引为空,因为第一个标记之前没有任何内容。

<强>更新

根据JRL的建议

$var = preg_split("#\s*<.*?>\s*#" , $string, -1, PREG_SPLIT_NO_EMPTY);

输出:

  

数组([0] =&gt; Joh Doe [1] =&gt; joh.doe@gmail.com [2] =&gt; 130105)