如何在PHP中用正则表达式删除前导字符和查询字符?

How to remove leading characters and the query character with a regular expression in PHP?

我正在使用 preg_replace() 和正则表达式删除连字符 (-) 之前的所有字符。我想更新表达式以同时删除连字符本身。完整的代码行如下所示。

$item['options']['Size'] = preg_replace('/^[^-]*/', '', $item['options']['Size']);

就目前而言,假设我有以下字符串:

TEST123-150X200

当前的 preg_replace 函数将给我留下:

-150X200

我想结束:

150X200

任何人都可以建议我如何更新 regular_expression 来实现这一点。谢谢

您可以在模式末尾添加连字符。

$item['options']['Size'] = preg_replace('/^[^-]*-/', '', $item['options']['Size']);
                                                ^

这样,连字符匹配(=消耗)并将被删除。请注意,[^-] 是一个否定字符 class,它匹配除 - 之外的任何字符。因此,连字符与您的原始正则表达式不匹配。

非正则表达式方法:

$item['options']['Size'] = ltrim(strstr($item['options']['Size'], '-'),'-');

IDEONE demo

<?php
$item = 'TEST123-150X200'; // string here
echo preg_replace('/^[^-]*-/', '', $item);
?>

除了给定的 answers/comments 之外,您还可以使用正向回顾并替换为:

<?php
$str = "TEST123-150X200";
$regex = '/.*(?<=-)/i';
$item['options']['Size'] = preg_replace($regex, '', $str);
// output: 150X200
?>

或者(如评论中所述),从 1 开始计数:

$item['options']['Size'] = substr(preg_replace('/^[^-]*/', '', $item['options']['Size']), 1);

我认为它不需要正则表达式...

$str = "TEST123-150X200";
var_dump(end(explode("-", $str))); //string(7) "150X200"
var_dump(ltrim(strstr($str, "-"), "-"));//string(7) "150X200"
var_dump(substr(strrchr($str, "-"), 1) );//string(7) "150X200"