在PHP中捕获方括号标记之间的内容


Capturing content between square bracket tags in PHP

我想把括号定义的标签中的内容放在下面的文本中,并把它们都放在一个数组中,我在PHP和preg_match函数中的尝试已经多次失败。在PHP中使用preg_match函数应该做什么?

$string="[restab title="name"]John O'Brian[/restab][restab title="telephone"]+15254636544[/restab][restab title="address"]Newyork, Wallstreet Ave, No 5[/restab]"

您可能正在寻找这样的东西:

preg_match_all('/'[[^]]+']([^[]+)'['/[^]]+']/is', $string, $matches);

这会给你以下结果:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(42) "[restab title="name"]John O'Brian[/restab]"
    [1]=>
    string(47) "[restab title="telephone"]+15254636544[/restab]"
    [2]=>
    string(62) "[restab title="address"]Newyork, Wallstreet Ave, No 5[/restab]"
  }
  [1]=>
  array(3) {
    [0]=>
    string(12) "John O'Brian"
    [1]=>
    string(12) "+15254636544"
    [2]=>
    string(29) "Newyork, Wallstreet Ave, No 5"
  }
}

您可以添加更多的方括号来捕获方括号内的文本。

你可以看看这个库是如何完成的,或者只是使用/更改它。

https://github.com/jbowens/jBBCode

编辑:如果您只需要以restab开头的标签。也许这就足够了:

$text = '[restab title="name"]John O''Brian[/restab][restab title="telephone"]+15254636544[/restab][restab title="address"]Newyork, Wallstreet Ave, No 5[/restab]';
preg_match_all("#'[restab title='"(.+?)'"](.*?)'[/restab']#",$text,$matches);

这将给每个以[restab title="…"]开头的标签

preg_match_all("/'[[^']]*']/", $text, $matches);

正则表达式捕获[]之间的$text中的所有内容。如果您想匹配所有内容,而不仅仅是第一个实例

,则需要preg_match_all()