基础 - 多行匹配 ¶
作者:KK
发表日期:2017.6.10
要点速读 ¶
其实平时的匹配是按行来匹配的,比如下图这样的情况,内容分成了2行,正常的正则模式匹配不了b到g之间的内容,必须钩选匹配新行,这样开启了多行匹配模式才可以
据我观察,无论是编辑器还是编程代码都是默认单行查找的
各种编程语言的多行匹配模式写法都不一样
JS代码 ¶
console.log('haha hi!\n what is your name?'.match( /hi.+your/ )); // null
console.log('haha hi!\n what is your name?'.match( /hi[\s\S]+?your/ )[0]); //匹配成功
虽然正则表达式中.
号表示任意字符,但是它不能代表换行,所以第一个表达式hi.+your
企图匹配两个词之间的所有内容一旦碰到\n
就匹配失败了
要解决这个问题就要将.
换成[\s\S]
才能匹配包含换行的所有内容
PHP代码 ¶
解决办法和JS一样
preg_match('#hi.+your#', 'haha hi!' . PHP_EOL . ' what is your name?' . PHP_EOL . 'fghijk', $matchResult1);
preg_match('#hi[\s\S]+?your#', 'haha hi!' . PHP_EOL . ' what is your name?' . PHP_EOL . 'fghijk', $matchResult2);
header('Content-type:text/plain');
print_r([
$matchResult1, // 空数组,失败
$matchResult2[0], // hi!\n what is your
]);
JAVA的情况 ¶
据说JAVA正则的.
号能匹配换行,于是就不需要特殊解决,只是据说,暂未考证