PHP正则表达式:如何在字符串的中间/结尾填充数字
我有一个JSON喷射的键=>值对列表。我对数组进行了排序,剩下的是以下内容(摘录相关案例,因为它们高达92个): 我需要做的是: 1) 将所有数字放在末尾和结尾处 2) 将它们填入2位数字(01、02和c) 因此,列表最终如下所示:PHP正则表达式:如何在字符串的中间/结尾填充数字,php,regex,zero-padding,Php,Regex,Zero Padding,我有一个JSON喷射的键=>值对列表。我对数组进行了排序,剩下的是以下内容(摘录相关案例,因为它们高达92个): 我需要做的是: 1) 将所有数字放在末尾和结尾处 2) 将它们填入2位数字(01、02和c) 因此,列表最终如下所示: directivesummary01 directivesummary10 directivesummarydue01 directivesummarydue10 directive01 directive10 directivecode01 directiveco
directivesummary01
directivesummary10
directivesummarydue01
directivesummarydue10
directive01
directive10
directivecode01
directivecode10
我本来希望用一个REGEX语句来实现这一点,但我迷路了。以下是我目前掌握的情况:
dir((\d{1,2}(summary|summarydue))|((ective\d{1,2})|(ectivecode\d{1,2})))
…啊,我不知道下一步该怎么办。如何继续前进?有没有更好的紧凑型方法
编辑:这也意味着我必须将“dir”替换为“directive”。结果表中暗示了这一点,但我没有为它做一个项目符号。此外,正则表达式是我能够构建的全部。因此,“失去了下一步该做什么”部分。- 匹配但不捕获
dir
- 匹配但不捕获可选子字符串
ective
- 在
之后立即保留零个或多个非数字字符作为捕获组#1(这说明了可选子字符串,如ective
)summarydue
- 将整个整数保留为捕获组#2
- 将字符串的其余部分保留为捕获组#3
- 在自定义函数中,使用硬编码
,然后附加捕获组#1(可能是空的),然后附加捕获组#3(也可能是空的),最后将pad capture group#2保留为零,最大长度为2位,并将该值附加到字符串末尾指令
array (
0 => 'directivesummary01',
1 => 'directivesummary10',
2 => 'directivesummarydue01',
3 => 'directivesummarydue10',
4 => 'directive01',
5 => 'directive10',
6 => 'directivecode01',
7 => 'directivecode10',
)
可以使用
preg\u replacecallback
在+10整数上修剪前导0
。此外,将来共享的regex101
或regexer
链接将更有用。好的。这不仅解决了问题,而且解释得非常清楚和简单,以至于我学到的比我来这里学到的还要多@mickmackusa,你对regex的掌握很明显。谢谢你的时间和努力。非常感谢。哇…:d当您发布清晰的问题陈述、足够大的样本集、所需的输出和编码尝试时;你有一个非常吸引人的完整问题要回答。我不知道json喷射是什么,但这并不重要,因为所有的逻辑都被清楚地表达了。我很高兴能够慷慨地分享我对Stackoverflow.JSON squirt=通过POST或GET接收的JSON数组增值问题的知识。年轻时的威廉·吉布森太多了
$strings = [
'dir1summary',
'dir10summary',
'dir1summarydue',
'dir10summarydue',
'directive1',
'directive10',
'directivecode1',
'directivecode10',
];
var_export(
preg_replace_callback(
'/dir(?:ective)?(\D*)(\d+)(.*)/',
function ($m) {
return "directive{$m[1]}{$m[3]}" . str_pad($m[2], 2, "0", STR_PAD_LEFT);
},
$strings
)
);
array (
0 => 'directivesummary01',
1 => 'directivesummary10',
2 => 'directivesummarydue01',
3 => 'directivesummarydue10',
4 => 'directive01',
5 => 'directive10',
6 => 'directivecode01',
7 => 'directivecode10',
)