如果有这样一个字符串
$var = "src = arr.c build.c eval.c field.c \
missing.c msg.c re.c version.c"
用一般的^\w+\s*=\s*.*$只能匹配上面的那句,而下面的那一句就无法匹配了
方法一:使用的是perl
$var = "src = arr.c build.c eval.c field.c \
missing.c msg.c re.c version.c";
$var =~ m/((^\w+\s*=\s*.*)(\n.*))/;
print "$1: ".$1."\n";
print "$2: ".$2."\n";
print "$3: ".$3."\n"; 结果为:
1: src = arr.c build.c eval.c field.c
missing.c msg.c re.c version.c
2: src = arr.c build.c eval.c field.c
3:
missing.c msg.c re.c version.c
注:这里能够匹配成功是因为perl的点号"."能够匹配除了换行符号之外的字符,然后在加上换行符号"\n"
和任意符号".*"就把全部匹配完成了
方法二:有的正则引擎把点号"."解析可以匹配换行符"\n"那可以这样
$var =~ m/((^\w+\s*=\s*[^\n]*)(\n.*))/效果跟刚才的那个一样,只是把点号替换为了"[^\n]",这样就排除了换行符号了。
正则表达式匹配多行文本技巧
本文介绍了如何使用正则表达式匹配多行文本。在处理包含多个连续行的字符串时,传统的^w+s*=s*.*$无法有效匹配。文章提到了两种解决方案:方法一是利用Perl语言,通过任意符号".*"完成全文本匹配;方法二是使用支持点号"."匹配换行符"
"的正则引擎进行匹配。
908

被折叠的 条评论
为什么被折叠?



