正则表达式从preg_match_all返回字符串

时间:2014-07-08 04:29:58

标签: php regex preg-match-all

我想从下面的文字中返回字符串“This is table one”:

$string = '[section title="<italic>This is table one</italic>"]'
使用

preg_match_all("@\[section title\=\<italic\>\"(\S+ )\<\/italic\>\"\]@s", $string, $match);

但是,我只能用一个单词返回。如何使用包含间距数字或特殊字符的规则?

由于

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此正则表达式来获取字符串This is table one

(?<==\"<italic>)[^"]*(?=<\/italic>)

DEMO

OR

\[section title="<italic>\K[^"]*(?=<\/italic>)

DEMO

PHP代码将是,

<?php
$string = '[section title="<italic>This is table one</italic>"]';
$regex =  '~\[section title="<italic>\K[^"]*(?=<\/italic>)~';
preg_match_all($regex, $string, $matches);
var_dump($matches);
?>

输出:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(17) "This is table one"
  }
}

<强>解释

  • \[section title="<italic>匹配字符串[section title="<italic>
  • \K会丢弃以前匹配的字符,因此会丢弃上面匹配的字符。
  • [^"]*(?=<\/italic>)匹配任何不是"双引号的字符零次或多次直至字符串</italic>

答案 1 :(得分:0)

您需要的RegEx是

(?<=italic>)[\w\s\W]+(?=<\/italic>)

Demo