2013-05-17 2 views
0

Мне нужно удалить "from products where id = 153183". Идентификатор может измениться, и поэтому мне нужно использовать preg_replace, чтобы удалить все после слова «from», а затем, возможно, использовать str_replace для удаления. У меня есть нижеследующее, но это приведет только к удалению слова, если оно будет последним в строке. Может ли кто-нибудь предложить то, что мне нужно добавить?PHP - удалить последнюю часть строки - preg_replace

//doesn't work 

$str = "select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183"; 

$new_str = preg_replace('/from$/', '', $str); 
+2

Вы уверены, что вам нужно удалить 'пункт от', а не' WHERE' только? – raina77ow

+0

Нет необходимости в регулярном выражении. Особенно при сопоставлении с простой строкой. –

+0

yes Я уверен, что хочу удалить из строки. Я не знаю, что он будет ID в строке, поэтому как я могу это сделать без reg ex? – LeeTee

ответ

0

Вы, вероятно, хотите что-то вроде /from.*$/ или просто /from.*/

+0

Если слово 'from' присутствует несколько раз, вы будете в беде. – Bart

+0

nope ... '. *' Жадный. –

+0

Как насчет утверждения типа «SELECT road_from_rome FROM maps»? '\ bfrom \ b' или' \ sfrom \ s' должны помочь с этим. – Blazemonger

1

Я немного запутался ваш вопрос, это должно заставить вас идти, хотя.

<?php 
$sql = 'SELECT * FROM products WHERE id = 153183'; 
$sql = preg_replace('~from products where id = [0-9]+$~i', '', $sql); 
echo $sql; 
/* 
    SELECT * 
*/ 
2

вы можете сделать это:

$new_str = stristr($str, " from ", true); 

Как из является reserved word в SQL вы не можете найти это слово в другом месте без кавычек или кавычки (так что я добавить пробел до и после) ,

Он возвращает строку перед словом «from».

strstrдля чувствительного к регистру поиска.

UPDATE: Регулярное выражение (на самом деле не нужны для этого вопроса):

$str = 'select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183'; 

preg_match('/(.*)\sfrom\s.*$/i', $str, $matches); // i for the insensitive case search 

$new_str = $matches[1]; // Contains what you want 
+0

+ для решения нерегулярного выражения. –

+1

Не лучший ли ['stristr'] (http://www.php.net/manual/en/function.stristr.php)? – Blazemonger

+0

Да, действительно, лучше – antoox

0

Вы можете использовать простой str_replace. Не уверен, как вы получаете идентификатор, так как он может меняться, я предполагаю, что у вас есть переменная.

$str = "select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183"; 
$new_str = str_replace("from products where id = " . $id, "", $str) 
+1

Значение 'id' может измениться. –

+0

спасибо, что я пропустил эту часть. –

0
$string = "select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183"; 
$part1 = substr("$string",0, strrpos($string,'from products where id ')); 
var_dump($part1); 

Поскольку основная частью строки статично вы можете использовать подстроку до секции обижая.

РЕЗУЛЬТАТЫ:

string(79) "select id, productdescription, category, price, code, manufacturer, categoryid " 
0

Сочетание preg_replace и str_replace также будет работать:

<?php 

$str = "select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183"; 
$id_removed = preg_replace('/\d/', '', $str); //remove dynamic product id 
$new_str = str_replace("from products where id =",'', $id_removed); 
echo $new_str; 


?> 
Смежные вопросы