PHP regexp - 如何提取模式的所有出现

时间:2017-05-22 16:24:02

标签: php regex

我有一个包含多个WIKI类型标签的字符串。例如[[TAG:4567]]。我需要从字符串中识别/提取所有标签,以便稍后进行替换。

例如,对于此字符串:

this is a test [[TITLE]] of more test [[LINK:27654]]

我想要一个数组:

0: [[TITLE]]
1: [[LINK:27654]]

我认为PHP preg_match可能有效,但它在regexp匹配之间返回了一大堆额外的字符。但我认为它只适用于主题字符串中的一个匹配。这就是我试过的:

$subject = "this is a test [[TITLE]] of more test [[LINK:27654]]";
preg_match( '/(?<=\[\[)(.*)(?=\]\])/', $subject, $matches );
print_r($matches);

但它给了我:

Array ( 
    [0] => TITLE]] of more test [[LINK:27654 
    [1] => TITLE]] of more test [[LINK:27654 
) 

这不是我需要的。有没有一种简单的方法来提取标签?我真的想避免遍历字符串并手动提取。

2 个答案:

答案 0 :(得分:1)

看起来更简单(也是正确的)正则表达式来解决这个问题

/\[\[(.*?)\]\]/

答案 1 :(得分:0)

Try this code snippet here

<?php

ini_set('display_errors', 1);
$subject = "this is a test [[TITLE]] of more test [[LINK:27654]]";
preg_match_all('/\[\[.*?\]\]/', $subject, $matches );
print_r($matches);