基础 - 提取多处局部内容

  • 作者:KK

  • 发表日期:2017.6.9


要点速读

  1. 实现方式是通过一对括号( )来包住要提取的指定内容,比如a(.)c就是匹配a与c之间的任意一个字符

  2. a(.)c能匹配“qqqabcxxx”的b,其实会有2个匹配结果,一个是“abc”,另一个是“b”

    终于知道为什么返回值是一个数组了吧,第2个结果就是括号里要提取的内容,在本文中我主要讲第2个结果


  3. a(.)c能匹配“匹配“qqqaocxxx”的”的o

  4. a(.)c不匹配“axqc”

  5. href="(.+)"能匹配<a href="http://xxx.com/yyy.html">链接1</a>的href里的http://xxx.com/yyy.html

  6. <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
]);