如何在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'], '-'),'-');
<?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"
我正在使用 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'], '-'),'-');
<?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"