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

时间:2016-01-06 08:15:26

标签: 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]"

3 个答案:

答案 0 :(得分:1)

您可以查看此库是如何完成的,或者只是使用/更改它。

https://github.com/jbowens/jBBCode

修改 如果您只需要以restab开头的标签。 Perhapse这就足够了:

$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 =“...”]

开头

答案 1 :(得分:1)

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

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"
  }
}

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

答案 2 :(得分:0)

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

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

,则需要preg_match_all()