我需要删除"from products where id = 153183"
。 id可以改变,所以我需要使用preg_replace来删除单词“from”之后的所有内容,然后可能使用str_replace来删除。我有下面但这只会删除字符串中的最后一个字。任何人都可以建议我需要添加什么吗?
//doesn't work
$str = "select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183";
$new_str = preg_replace('/from$/', '', $str);
答案 0 :(得分:2)
你可以这样做:
$new_str = stristr($str, " from ", true);
由于来自是SQL中的reserved word,所以在没有引号或反引号的情况下,你无法在其他地方找到这个词(所以我在之前和之后添加了一个空格)。
它返回“from”字之前的字符串。
strstr
用于区分大小写的搜索。
更新:正则表达式(此问题并非真正需要):
$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
答案 1 :(得分:1)
我对你的问题感到有点困惑,这应该让你顺利。
<?php
$sql = 'SELECT * FROM products WHERE id = 153183';
$sql = preg_replace('~from products where id = [0-9]+$~i', '', $sql);
echo $sql;
/*
SELECT *
*/
答案 2 :(得分:0)
您可能需要/from.*$/
或/from.*/
答案 3 :(得分:0)
您可以使用简单的str_replace
。不知道你是如何获得id的,因为它可以改变,我假设你有一个变量。
$str = "select id, productdescription, category, price, code, manufacturer, categoryid from products where id = 153183";
$new_str = str_replace("from products where id = " . $id, "", $str)
答案 4 :(得分: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 "
答案 5 :(得分: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;
?>