Perl脚本如何提取包含空格的id属性完整值
问题原因
原有代码使用空格作为分隔符切割整行文本,当id属性值包含空格时会被拆分为多个数组元素,仅取索引为2的元素只能获取空格前的内容,导致结果截断。
修正后代码
use strict; use warnings; my $input = "location/input.txt"; # Windows环境下如果用反斜杠作为路径分隔符需要转义,建议用正斜杠避免转义问题 open(my $FH, "<", $input) or die "无法打开输入文件: $!"; while(my $str = <$FH>) { # 正则匹配直接捕获id双引号中的所有内容 if ($str =~ /id="([^"]+)"/) { print "$1\n"; } } close($FH);
实现说明
- 正则
/id="([^"]+)"/会匹配id="开头的内容,捕获组([^"]+)会匹配所有不为双引号的字符,直到遇到下一个双引号结束,不管id值中是否包含空格都可以完整提取 - 改用三参数形式的open函数、词法文件句柄,写法更规范安全,die语句加错误提示便于排查问题
- 修正了原路径中
\i会被识别为转义字符的问题
运行后输出结果为:
small sample test big city
内容的提问来源于stack exchange,提问作者Noor
相关产品推荐
相关产品推荐

