PHP正则表达式拆分

时间:2012-03-24 22:38:56

标签: php regex

我将使这快速简单

我有一个查询,我想拆分它,以便它返回一个带有:符号后面的单词的数组。这是我到目前为止所做的,它按预期进行,但在匹配的针之前返回整个字符串。我只想让数组包含:符号后面的单词。

<?php  $arr = preg_split('/[:]/', $query, 0); 

   print_r($arr);

 ?>

返回

    Array
(
    [0] => SELECT user_name FROM test WHERE user_name = 
    [1] => user_name
)

使用此查询

“SELECT user_name FROM test WHERE user_name =:user_name”

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

试试这个:

preg_match_all("/:(\w+)/", $string, $matches);

通过执行此操作,位于:之后的所有元素都将位于$ matches [1]子数组中。我假设您要处理具有多个命名参数的SQL语句。例如:

SELECT user_name FROM test WHERE user_name = :user_name and last_name = :last_name

将导致$ match成为:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(10) ":user_name"
    [1]=>
    string(10) ":last_name"
  }
  [1]=>
  array(2) {
    [0]=>
    string(9) "user_name"
    [1]=>
    string(9) "last_name"
  }
}

答案 1 :(得分:0)

我编辑了你的问题,以便其他人看到结果更好。但是答案: preg_split返回一个数组,你正在寻找的是数组元素:

<?php  $arr = preg_split('/[:]/', $query, 0); 

   print($arr[1]);

 ?>

这会根据需要返回user_name

答案 2 :(得分:0)

您可能想要使用preg_match()来实现此目标

$query = "SELECT user_name FROM test WHERE user_name = :user_name";
preg_match('/:(\w+)/', $query, $matches);
echo $matches[1]; //gives your user_name