Perl如何从指定格式输入字符串中提取数字与ID子串
实现方案
你可以直接通过正则捕获组完成提取,天然兼容字符串中任意位置的多余空格,不需要额外做字符串裁剪操作。
示例输入格式
(1, 'c21bd4d76fe97759aa27a0c99bff6710')
注:括号前后、逗号前后、字符串首尾可能存在不定数量的多余空格
可直接运行的代码
my $text = "(1, 'c21bd4d76fe97759aa27a0c99bff6710') "; my ($row_id, $id); # 正则匹配提取,自动跳过所有多余空白 if ($text =~ /^\s*\(\s*(\d+)\s*,\s*'([a-f0-9]+)'\s*\)\s*$/) { $row_id = $1; $id = $2; print "$row_id $id\n"; }
运行输出:1 c21bd4d76fe97759aa27a0c99bff6710
正则规则说明
- 所有
\s*用来匹配对应位置任意数量的空白字符(空格、制表符都可兼容),不管对应位置有没有空格、有多少空格都不影响匹配结果 (\d+)是第一个捕获组,提取括号内开头的数字ID([a-f0-9]+)是第二个捕获组,提取单引号包裹的十六进制格式ID- 匹配逻辑自带格式校验,如果输入字符串不符合
(数字, 'ID')的基础结构,不会错误赋值,避免脏数据进入后续逻辑
对比你之前用split加固定偏移substr的方案,正则方案不会因为空格位置变化出现截取偏移的问题,鲁棒性更强。如果你的ID固定是32位MD5值,还可以把第二个捕获组改成([a-f0-9]{32}),校验会更严格。
内容的提问来源于stack exchange,提问作者Atish Bargaje
相关产品推荐
相关产品推荐

