2012-03-24 4 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 FROM теста WHERE user_name =: user_name"

спасибо за любую помощь

+0

пожалуйста, вы можете исправить свои примеры, поэтому они понятны. Благодарю. – nickw444

+0

[Что это для] (http://www.catb.org/~esr/faqs/smart-questions.html#goal)? Что, собственно, является желаемым результатом для примера? Кроме того, просьба предоставить дополнительные примеры ввода и желаемых результатов. – outis

+0

Ум, вы ищете 'print_r ($ arr [1])'? – alexis

ответ

4

Попробуйте это:

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

Таким образом, все ваши элементы, которые находятся после:, будут находиться в $ match [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

+0

Nope Starx. Я написал тестовый скрипт. Это прекрасно работает. –

+0

Я использовал это, и он работает спасибо –

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 
Смежные вопросы