基础 - 提取多处局部内容 ¶
作者:KK
发表日期:2017.6.9
要点速读 ¶
实现方式是通过一对括号
( )
来包住要提取的指定内容,比如a(.)c
就是匹配a与c之间的任意一个字符a(.)c
能匹配“qqqabcxxx”的b,其实会有2个匹配结果,一个是“abc”,另一个是“b”终于知道为什么返回值是一个数组了吧,第2个结果就是括号里要提取的内容,在本文中我主要讲第2个结果
a(.)c
能匹配“匹配“qqqaocxxx”的”的oa(.)c
不匹配“axqc”href="(.+)"
能匹配<a href="http://xxx.com/yyy.html">链接1</a>
的href里的http://xxx.com/yyy.html<a.+href="(.+)">(.+)</a>
能匹配<a href="http://xxx.com/yyy.html">链接1</a>
的href里的网址和链接文字这个是进一步扩展的了,注意里面有2对括号,就是要提取2处局部内容,运行结果是这样的:
所以其实你喜欢加多几对括号都可以,匹配结果会追加到数组里面
JS代码 ¶
注意这里输出结果的下标是1,不是0,0是整个匹配结果的提取,不是局部提取
console.log( 'qqqabcxxx'.match(/a(.)c/)[1] ); // b
console.log( 'qqqaocxxx'.match(/a(.)c/)[1] ); // o
console.log( 'axqc'.match(/a(.)c/) ); // null
console.log( '<a href="http://xxx.com/yyy.html">链接1</a>'.match(/href="(.+)"/)[1] ); // http://xxx.com/yyy.html
console.log( '<a href="http://xxx.com/yyy.html">链接1</a>'.match(/<a.+href="(.+)">(.+)<\/a>/) ); // http://xxx.com/yyy.html 链接1
PHP代码 ¶
preg_match('#a(.)c#', 'qqqabcxxx', $matchResult1);
preg_match('#a(.)c#', 'qqqaocxxx', $matchResult2);
preg_match('#a(.)c#', 'axqc', $matchResult3);
preg_match('#href="(.+)"#', '<a href="http://xxx.com/yyy.html">链接1</a>', $matchResult4);
preg_match('#<a.+href="(.+)">(.+)<\/a>#', '<a href="http://xxx.com/yyy.html">链接1</a>', $matchResult5);
header('Content-type:text/plain');
print_r([
$matchResult1[1], // b
$matchResult2[1], // o
$matchResult3, // 空数组
$matchResult4[1], // http://xxx.com/yyy.html
$matchResult5[1], // http://xxx.com/yyy.html
$matchResult5[2], // 链接1
]);