php - 在 PHP 中使用正则表达式增加一个计数器
问题描述
我试图在 PHP 中的字符串末尾增加一个计数器。计数器总是在字符串末尾的括号之间,其余的可以是字面上的任何东西,这意味着甚至可能有一些看起来像计数器的东西(即:括号之间的数字),但具有不同的含义,不应该是改变。
例子:
Foo (Bar) (666) (123)
:Foo (Bar) (666)
是主要部分,123
也是计数器。我想得到:Foo (Bar) (666) (124)
。(666)
看起来像计数器,但由于它不位于字符串的末尾,因此不被视为这样。Lorem ipsum dolor sit amet (1337)
:Lorem ipsum dolor sit amet
是主要部分,1337
也是计数器。我想得到:Lorem ipsum dolor sit amet (1338)
。
确切的实现并不重要。我只想使用正则表达式来匹配主要部分和计数器,这样我就可以将它们放入变量中,递增计数器并重新构建字符串。
我可以轻松地将计数器与类似的东西匹配,\((\d*)\)$
但我不知道如何匹配字符串的其余部分。
什么正则表达式可以完成这项工作?
解决方案
好吧,我不喜欢这个解决方案,但既然你要求它:
这是使用preg_replace_callback的解决方案:
(?<=\()\d+(?=\)$)
示例代码:
$re = '/(?<=\()\d+(?=\)$)/';
$str = 'Lorem ipsum dolor sit amet (1337)';
$result = preg_replace_callback(
$re,
function ($matches) {
return ++$matches[0];
},
$str
);
echo "The result of the substitution is ".$result;
PS:如果您的“字符串”实际上是多行文件的内容,请$
用\Z
in替换$re
以匹配文件的末尾。
推荐阅读
- html - 在自动对焦 html5 输入日期字段 angularjs 上打开日期选择器
- c - 是否只有基于系统调用的功能?
- javascript - 使用角管html将日期从yyyymmdd转换为yyyy/mm/dd甲酸盐
- node.js - 如何在 Sequelize 中进行全局错误处理
- java - Java服务器上Google App Engine中的CORS错误
- machine-learning - 虚拟变量 - 这些二进制变量的值可以大于 1 吗?
- docker - 为什么 Traefik 在后端网络上发现容器 IP 地址?
- sql - Google Cloud SQL 导入 2005 备份失败
- python-3.x - AttributeError:“NoneType”对象没有属性“image_data_format”keras
- python - ImportError:没有名为“dask.dataframe”的模块;