从正则表达式中提取值

时间:2016-10-20 07:58:49

标签: php regex

我有这段代码

$regex = '/{tip(?:\s+class\s*=\s*"([a-zA-Z\s]+)")?}([^{]*){\/tip}/';

$matches = null;

preg_match_all($regex, $article, $matches);

if(is_array($matches)) {

 foreach ($matches as $match) {

    $article = preg_replace($regex, '<span class="tooltip $1"><i>?</i><em>$2</em></span>', $article);
   }
}

所以我正在寻找{tip} tip text {/tip}{tip class="someClass"} tip text{/}并替换它。它的工作正常,但根据类别会有不同的输出。我需要这样的东西:

if (strpos($match, 'class') !== false) {

    output

} else {
    $class = $match[0];
    if ($class == 'sticked') {

        other output
    }
}

但是我不知道如何将类提取到变量,也匹配是一个结果数组,所以每次类都会在不同的位置。

1 个答案:

答案 0 :(得分:0)

试试这个:

$regex = '/{tip\s*([a-z]*)=?"?\'?([^\'"]*)"?\'?\s*}([^{]*){\/tip}/';

通过这种方式,您可以使用\ s *在单词或双引号之前或之后使用任意数量的空格提取类属性,使用&#34;?&#39;?

编辑使用/不使用类定义。此模式将返回正在使用的属性,因此,如果&#34; class&#34;错误拼写。