2012-03-24 77 views
0

我将使这个快速和简单PHP的正则表达式分割

我有一个查询,我想分裂它,以便它返回:符号后的单词数组。这是我迄今为止所做的,并且如预期那样,但是在匹配针之前返回整个弦。我只想让数组在单词后面包含单词。

<?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测试从其中用户名=:USER_NAME”

感谢您的帮助

+0

可以请你解决你的例子,让他们理解。谢谢。 – nickw444 2012-03-24 22:41:32

+0

[这是什么](http://www.catb.org/~esr/faqs/smart-questions.html#goal)?这个例子的结果究竟是什么?另外,请提供更多输入和期望结果的例子。 – outis 2012-03-24 22:43:37

+0

嗯,你正在寻找'print_r($ arr [1])'? – alexis 2012-03-24 22:43:47

回答

4

试试这个:

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

通过这样做,所有在a之后的元素将在$ matches [1]子数组中。我假设你想用多个命名参数来处理SQL语句。因此,例如:

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

会导致$匹配是:

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" 
    } 
} 
+0

这应该会给我一个错误,我认为 – Starx 2012-03-24 22:58:05

+0

Nope Starx。我写了一个测试脚本。这工作得很好。 – 2012-03-25 01:10:48

+0

我用这个,它的作品谢谢你 – 2012-03-26 19:46:16

0

我编辑你的问题所以最好给别人看result.But答案: preg_split返回一个数组,和你“再求是数组的元素:

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

    print($arr[1]); 

?> 

这将返回user_name,你想要的。

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