用正则匹配多行文本

前端之家收集整理的这篇文章主要介绍了用正则匹配多行文本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如果有这样一个字符串

$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]",这样就排除了换行符号了。

猜你在找的正则表达式相关文章