【问题标题】:How to remove 2 last characters with preg_replace?如何使用 preg_replace 删除 2 个最后一个字符?
【发布时间】:2019-06-07 14:52:53
【问题描述】:

我有一个类似的代码: 784XX 。 XX 可以是字符或数字,我需要一个表达式来删除最后 2 个字符 (XX),使用 (且仅) preg_replace

我该怎么做?

例如,输出:

782A3 is 782,

0012122 is 00121,

76542A is 7654,

333333CD is 333333,

【问题讨论】:

  • substr('784XX', 0, -2)
  • 一个非常奇特的 Unicode 字符串 - preg_replace('/\X{2}\z/u', '', $s)
  • 如果结尾有CRLF,需要去掉怎么办?或者,它可能是不可打印的,或者是一些奇怪的组合字符或其他可疑的东西......

标签: php regex preg-replace regex-group substr


【解决方案1】:

你可以使用substr函数。

但如果你将使用 preg_replace 你可以这样做:

$val = preg_replace('/[\w\d]{2}$/', '', $val);

【讨论】:

  • 为什么[\w\d]这个奇怪的类?
  • @CasimiretHippolyte 引用问题:“XX 可以是字符或数字”
  • \w 类包含什么?
【解决方案2】:

我很确定有更简单的方法来完成这项任务,但是如果我们希望使用正则表达式,我们会从一个简单的表达式开始,例如:

(.+)?(..)

如果我理解正确的问题,并且我们想要的输出在这个捕获组中:

(.+)

Demo

$re = '/(.+)?(..)/m';
$str = '782A3
0012122
76542A
333333CD';
$subst = '$1';

$result = preg_replace($re, $subst, $str);

echo $result;

正则表达式电路

jex.im 可视化正则表达式:

建议

AbraCadaver在评论中的建议是更好的方法:

substr('784XX', 0, -2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多